Abstract Xss sanitizer

Turn the Xss sanitizer into an abstract class to support customizations
and provide a default implementation.
This commit is contained in:
Remco Vermeulen
2020-08-17 10:31:44 +02:00
parent 99c9524639
commit 518459c0f7
2 changed files with 9 additions and 3 deletions

View File

@@ -22,9 +22,7 @@ class XSSConfig extends TaintTracking::Configuration {
override predicate isSink(DataFlow::Node sink) { sink instanceof XssSink } override predicate isSink(DataFlow::Node sink) { sink instanceof XssSink }
override predicate isSanitizer(DataFlow::Node node) { override predicate isSanitizer(DataFlow::Node node) { node instanceof XssSanitizer }
node.getType() instanceof NumericType or node.getType() instanceof BooleanType
}
} }
from DataFlow::PathNode source, DataFlow::PathNode sink, XSSConfig conf from DataFlow::PathNode source, DataFlow::PathNode sink, XSSConfig conf

View File

@@ -12,6 +12,8 @@ import semmle.code.java.dataflow.TaintTracking2
abstract class XssSink extends DataFlow::Node { } abstract class XssSink extends DataFlow::Node { }
abstract class XssSanitizer extends DataFlow::Node { }
private class DefaultXssSink extends XssSink { private class DefaultXssSink extends XssSink {
DefaultXssSink() { DefaultXssSink() {
exists(HttpServletResponseSendErrorMethod m, MethodAccess ma | exists(HttpServletResponseSendErrorMethod m, MethodAccess ma |
@@ -80,6 +82,12 @@ private class DefaultXssSink extends XssSink {
} }
} }
private class DefaultXSSSanitizer extends XssSanitizer {
DefaultXSSSanitizer() {
this.getType() instanceof NumericType or this.getType() instanceof BooleanType
}
}
private class ServletWriterSourceToWritingMethodFlowConfig extends TaintTracking2::Configuration { private class ServletWriterSourceToWritingMethodFlowConfig extends TaintTracking2::Configuration {
ServletWriterSourceToWritingMethodFlowConfig() { ServletWriterSourceToWritingMethodFlowConfig() {
this = "XSS::ServletWriterSourceToWritingMethodFlowConfig" this = "XSS::ServletWriterSourceToWritingMethodFlowConfig"