Skip to content

Commit 7ca7bdf

Browse files
authored
Merge pull request #2725 from aschackmull/java/sqlinjection-number-barrier
Java: Add java.lang.Number as a sanitizer for SQL injection.
2 parents b542b08 + 2a0a568 commit 7ca7bdf

File tree

3 files changed

+13
-5
lines changed

3 files changed

+13
-5
lines changed

java/ql/src/Security/CWE/CWE-089/SqlInjectionLib.qll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ private class QueryInjectionFlowConfig extends TaintTracking::Configuration {
5454
override predicate isSink(DataFlow::Node sink) { sink instanceof QueryInjectionSink }
5555

5656
override predicate isSanitizer(DataFlow::Node node) {
57-
node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType
57+
node.getType() instanceof PrimitiveType or
58+
node.getType() instanceof BoxedType or
59+
node.getType() instanceof NumberType
5860
}
5961
}
6062

java/ql/src/semmle/code/java/JDK.qll

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,16 @@ class TypeMath extends Class {
101101
TypeMath() { this.hasQualifiedName("java.lang", "Math") }
102102
}
103103

104+
/** The class `java.lang.Number`. */
105+
class TypeNumber extends RefType {
106+
TypeNumber() { this.hasQualifiedName("java.lang", "Number") }
107+
}
108+
109+
/** A (reflexive, transitive) subtype of `java.lang.Number`. */
110+
class NumberType extends RefType {
111+
NumberType() { exists(TypeNumber number | hasSubtype*(number, this)) }
112+
}
113+
104114
/** A numeric type, including both primitive and boxed types. */
105115
class NumericType extends Type {
106116
NumericType() {

java/ql/src/semmle/code/java/security/Random.qll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,6 @@ private class PredictableSeedFlowConfiguration extends DataFlow::Configuration {
3636
}
3737
}
3838

39-
private class TypeNumber extends Class {
40-
TypeNumber() { this.getQualifiedName() = "java.lang.Number" }
41-
}
42-
4339
private predicate predictableCalcStep(Expr e1, Expr e2) {
4440
e2.(BinaryExpr).hasOperands(e1, any(PredictableSeedExpr p))
4541
or

0 commit comments

Comments
 (0)