1. import java
    2. import semmle.code.java.dataflow.DataFlow
    3. import semmle.code.java.dataflow.FlowSources
    4. import semmle.code.java.dataflow.TaintTracking
    5. class MyTaintTrackingConfiguration extends TaintTracking::Configuration {
    6. MyTaintTrackingConfiguration() {
    7. this = "MyTaintTrackingConfiguration"
    8. }
    9. override predicate isSource(DataFlow::Node source) {
    10. exists(source.asParameter())
    11. }
    12. override predicate isSink(DataFlow::Node sink) {
    13. exists(Call call |
    14. sink.asExpr() = call.getArgument(0) and
    15. call.getCallee().hasQualifiedName("java.sql", "Statement", "executeQuery")
    16. )
    17. }
    18. }
    19. from DataFlow::Node source, DataFlow::Node sink, TaintTracking::Configuration config
    20. where config.hasFlow(source, sink)
    21. select source, sink

    优化RemoteFlowSource,增加对RequestParam标注的支持

    1. class MySource extends DataFlow::Node {
    2. MySource() {
    3. exists(Annotation ann,AnnotationType anntp|
    4. this instanceof RemoteFlowSource or (
    5. anntp.hasQualifiedName("org.springframework.web.bind.annotation", "RequestParam") and
    6. ann.getType() = anntp and
    7. this.asParameter().getAnAnnotation() = ann
    8. )
    9. )
    10. }
    11. }
    12. class MyTaintTrackingConfiguration extends TaintTracking::Configuration {
    13. MyTaintTrackingConfiguration() {
    14. this = "MyTaintTrackingConfiguration"
    15. }
    16. override predicate isSource(DataFlow::Node source) {
    17. source instanceof MySource
    18. }
    19. override predicate isSink(DataFlow::Node sink) {
    20. exists(Call call |
    21. sink.asExpr() = call.getArgument(0) and
    22. call.getCallee().hasQualifiedName("java.sql", "Statement", "executeQuery")
    23. )
    24. }
    25. }