|
15 | 15 | import semmle.code.java.Expr
|
16 | 16 | import semmle.code.java.dataflow.FlowSources
|
17 | 17 | import semmle.code.java.security.SqlInjectionQuery
|
18 |
| -import DataFlow::PathGraph |
19 | 18 |
|
20 |
| -class LocalUserInputToQueryInjectionFlowConfig extends TaintTracking::Configuration { |
21 |
| - LocalUserInputToQueryInjectionFlowConfig() { this = "LocalUserInputToQueryInjectionFlowConfig" } |
| 19 | +private module LocalUserInputToQueryInjectionFlowConfig implements DataFlow::ConfigSig { |
| 20 | + predicate isSource(DataFlow::Node src) { src instanceof LocalUserInput } |
22 | 21 |
|
23 |
| - override predicate isSource(DataFlow::Node src) { src instanceof LocalUserInput } |
| 22 | + predicate isSink(DataFlow::Node sink) { sink instanceof QueryInjectionSink } |
24 | 23 |
|
25 |
| - override predicate isSink(DataFlow::Node sink) { sink instanceof QueryInjectionSink } |
26 |
| - |
27 |
| - override predicate isSanitizer(DataFlow::Node node) { |
| 24 | + predicate isBarrier(DataFlow::Node node) { |
28 | 25 | node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType
|
29 | 26 | }
|
30 | 27 |
|
31 |
| - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { |
| 28 | + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { |
32 | 29 | any(AdditionalQueryInjectionTaintStep s).step(node1, node2)
|
33 | 30 | }
|
34 | 31 | }
|
35 | 32 |
|
| 33 | +module LocalUserInputToQueryInjectionFlow = |
| 34 | + TaintTracking::Make<LocalUserInputToQueryInjectionFlowConfig>; |
| 35 | + |
| 36 | +import LocalUserInputToQueryInjectionFlow::PathGraph |
| 37 | + |
36 | 38 | from
|
37 |
| - DataFlow::PathNode source, DataFlow::PathNode sink, LocalUserInputToQueryInjectionFlowConfig conf |
38 |
| -where conf.hasFlowPath(source, sink) |
| 39 | + LocalUserInputToQueryInjectionFlow::PathNode source, |
| 40 | + LocalUserInputToQueryInjectionFlow::PathNode sink |
| 41 | +where LocalUserInputToQueryInjectionFlow::hasFlowPath(source, sink) |
39 | 42 | select sink.getNode(), source, sink, "This query depends on a $@.", source.getNode(),
|
40 | 43 | "user-provided value"
|
0 commit comments