|
14 | 14 | import java |
15 | 15 | import semmle.code.java.dataflow.FlowSources |
16 | 16 | import semmle.code.java.security.XSS |
17 | | -import DataFlow::PathGraph |
18 | 17 |
|
19 | | -class XssConfig extends TaintTracking::Configuration { |
20 | | - XssConfig() { this = "XSSConfig" } |
| 18 | +module XssConfig implements DataFlow::ConfigSig { |
| 19 | + predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } |
21 | 20 |
|
22 | | - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } |
| 21 | + predicate isSink(DataFlow::Node sink) { sink instanceof XssSink } |
23 | 22 |
|
24 | | - override predicate isSink(DataFlow::Node sink) { sink instanceof XssSink } |
| 23 | + predicate isBarrier(DataFlow::Node node) { node instanceof XssSanitizer } |
25 | 24 |
|
26 | | - override predicate isSanitizer(DataFlow::Node node) { node instanceof XssSanitizer } |
| 25 | + predicate isBarrierOut(DataFlow::Node node) { node instanceof XssSinkBarrier } |
27 | 26 |
|
28 | | - override predicate isSanitizerOut(DataFlow::Node node) { node instanceof XssSinkBarrier } |
29 | | - |
30 | | - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { |
| 27 | + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { |
31 | 28 | any(XssAdditionalTaintStep s).step(node1, node2) |
32 | 29 | } |
33 | 30 | } |
34 | 31 |
|
35 | | -from DataFlow::PathNode source, DataFlow::PathNode sink, XssConfig conf |
36 | | -where conf.hasFlowPath(source, sink) |
| 32 | +module XssFlow = TaintTracking::Make<XssConfig>; |
| 33 | + |
| 34 | +import XssFlow::PathGraph |
| 35 | + |
| 36 | +from XssFlow::PathNode source, XssFlow::PathNode sink |
| 37 | +where XssFlow::hasFlowPath(source, sink) |
37 | 38 | select sink.getNode(), source, sink, "Cross-site scripting vulnerability due to a $@.", |
38 | 39 | source.getNode(), "user-provided value" |
0 commit comments