Skip to content

Commit 9220bea

Browse files
committed
Swift: Rewrite SqlInjectionQuery to use DataFlow::ConfigSig
1 parent 70d0e98 commit 9220bea

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

swift/ql/lib/codeql/swift/security/SqlInjectionQuery.qll

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import codeql.swift.security.SqlInjectionExtensions
1313
/**
1414
* A taint configuration for tainted data that reaches a SQL sink.
1515
*/
16-
class SqlInjectionConfig extends TaintTracking::Configuration {
16+
deprecated class SqlInjectionConfig extends TaintTracking::Configuration {
1717
SqlInjectionConfig() { this = "SqlInjectionConfig" }
1818

1919
override predicate isSource(DataFlow::Node node) { node instanceof FlowSource }
@@ -28,3 +28,25 @@ class SqlInjectionConfig extends TaintTracking::Configuration {
2828
any(SqlInjectionAdditionalTaintStep s).step(nodeFrom, nodeTo)
2929
}
3030
}
31+
32+
/**
33+
* A taint configuration for tainted data that reaches a SQL sink.
34+
*/
35+
module SqlInjectionConfig implements DataFlow::ConfigSig {
36+
predicate isSource(DataFlow::Node node) { node instanceof FlowSource }
37+
38+
predicate isSink(DataFlow::Node node) { node instanceof SqlInjectionSink }
39+
40+
predicate isBarrier(DataFlow::Node sanitizer) {
41+
sanitizer instanceof SqlInjectionSanitizer
42+
}
43+
44+
predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) {
45+
any(SqlInjectionAdditionalTaintStep s).step(nodeFrom, nodeTo)
46+
}
47+
}
48+
49+
/**
50+
* Detect taint flow of tainted data that reaches a SQL sink.
51+
*/
52+
module SqlInjectionFlow = TaintTracking::Global<SqlInjectionConfig>;

swift/ql/src/queries/Security/CWE-089/SqlInjection.ql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
import swift
1414
import codeql.swift.dataflow.DataFlow
1515
import codeql.swift.security.SqlInjectionQuery
16-
import DataFlow::PathGraph
16+
import SqlInjectionFlow::PathGraph
1717

18-
from SqlInjectionConfig config, DataFlow::PathNode sourceNode, DataFlow::PathNode sinkNode
19-
where config.hasFlowPath(sourceNode, sinkNode)
18+
from SqlInjectionFlow::PathNode sourceNode, SqlInjectionFlow::PathNode sinkNode
19+
where SqlInjectionFlow::flowPath(sourceNode, sinkNode)
2020
select sinkNode.getNode(), sourceNode, sinkNode, "This query depends on a $@.",
2121
sourceNode.getNode(), "user-provided value"

0 commit comments

Comments
 (0)