|
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