Skip to content

Commit 6b15839

Browse files
committed
JS: Add tests for the examples used in the docs
1 parent ba1364a commit 6b15839

File tree

9 files changed

+78
-0
lines changed

9 files changed

+78
-0
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
commandInjectionSinks
2+
| execa.example.js:2:7:2:9 | cmd |
3+
sqlInjectionSinks
4+
| connection.example.ts:4:20:4:20 | q |
5+
| connection.example.ts:9:18:9:18 | q |
6+
remoteFlowSources
7+
| message.example.js:1:46:1:50 | event |
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import javascript
2+
private import semmle.javascript.security.dataflow.CommandInjectionCustomizations
3+
private import semmle.javascript.security.dataflow.SqlInjectionCustomizations
4+
5+
query predicate commandInjectionSinks(DataFlow::Node node) {
6+
node instanceof CommandInjection::Sink
7+
}
8+
9+
query predicate sqlInjectionSinks(DataFlow::Node node) { node instanceof SqlInjection::Sink }
10+
11+
query predicate remoteFlowSources(RemoteFlowSource node) { any() }
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Connection } from "@example/mysql";
2+
3+
function submit(connection: Connection, q: string) {
4+
connection.query(q); // <-- add 'q' as a SQL injection sink
5+
}
6+
7+
import { getConnection } from "@example/db";
8+
let connection = getConnection();
9+
connection.query(q); // <-- add 'q' as a SQL injection sink
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/javascript-all
4+
extensible: sinkModel
5+
data:
6+
- [
7+
"@example/mysql.Connection",
8+
"Member[query].Argument[0]",
9+
"sql-injection",
10+
]
11+
12+
- addsTo:
13+
pack: codeql/javascript-all
14+
extensible: typeModel
15+
data:
16+
- [
17+
"@example/mysql.Connection",
18+
"@example/db",
19+
"Member[getConnection].ReturnValue",
20+
]
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import { shell } from "@example/execa";
2+
shell(cmd);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/javascript-all
4+
extensible: sinkModel
5+
data:
6+
- [
7+
"@example/execa",
8+
"Member[shell].Argument[0]",
9+
"command-line-injection",
10+
]
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
window.addEventListener("message", function (event) {
2+
let data = event.data; // <-- add 'event.data' as a taint source
3+
});
4+
5+
window.addEventListener("onclick", function (event) {
6+
let data = event.data; // <-- 'event.data' should not be a taint source
7+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/javascript-all
4+
extensible: sourceModel
5+
data:
6+
- [
7+
"global",
8+
"Member[addEventListener].WithStringArgument[0=message].Argument[1].Parameter[0].Member[data]",
9+
"remote-flow",
10+
]

javascript/ql/test/qlpack.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ dependencies:
55
codeql/javascript-queries: ${workspace}
66
extractor: javascript
77
tests: .
8+
dataExtensions:
9+
- library-tests/DataExtensions/*.model.yml

0 commit comments

Comments
 (0)