Skip to content

Commit caa48e8

Browse files
committed
JS: Recognise form input from NgForm
1 parent 174e108 commit caa48e8

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,15 @@ module XssThroughDom {
211211
)
212212
}
213213
}
214+
215+
/**
216+
* An object containing input values from an Angular form, accessed through an `NgForm` object.
217+
*/
218+
class AngularFormSource extends Source {
219+
AngularFormSource() {
220+
this = API::Node::ofType("@angular/forms", "NgForm").getMember("value").asSource()
221+
}
222+
}
214223
}
215224

216225
/**

javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ nodes
55
| angular.ts:16:24:16:35 | target.value |
66
| angular.ts:16:24:16:35 | target.value |
77
| angular.ts:16:24:16:35 | target.value |
8+
| angular.ts:20:24:20:33 | form.value |
9+
| angular.ts:20:24:20:33 | form.value |
10+
| angular.ts:20:24:20:37 | form.value.foo |
11+
| angular.ts:20:24:20:37 | form.value.foo |
812
| forms.js:8:23:8:28 | values |
913
| forms.js:8:23:8:28 | values |
1014
| forms.js:9:31:9:36 | values |
@@ -173,6 +177,10 @@ nodes
173177
edges
174178
| angular.ts:12:24:12:41 | event.target.value | angular.ts:12:24:12:41 | event.target.value |
175179
| angular.ts:16:24:16:35 | target.value | angular.ts:16:24:16:35 | target.value |
180+
| angular.ts:20:24:20:33 | form.value | angular.ts:20:24:20:37 | form.value.foo |
181+
| angular.ts:20:24:20:33 | form.value | angular.ts:20:24:20:37 | form.value.foo |
182+
| angular.ts:20:24:20:33 | form.value | angular.ts:20:24:20:37 | form.value.foo |
183+
| angular.ts:20:24:20:33 | form.value | angular.ts:20:24:20:37 | form.value.foo |
176184
| forms.js:8:23:8:28 | values | forms.js:9:31:9:36 | values |
177185
| forms.js:8:23:8:28 | values | forms.js:9:31:9:36 | values |
178186
| forms.js:9:31:9:36 | values | forms.js:9:31:9:40 | values.foo |
@@ -283,6 +291,7 @@ edges
283291
#select
284292
| angular.ts:12:24:12:41 | event.target.value | angular.ts:12:24:12:41 | event.target.value | angular.ts:12:24:12:41 | event.target.value | $@ is reinterpreted as HTML without escaping meta-characters. | angular.ts:12:24:12:41 | event.target.value | DOM text |
285293
| angular.ts:16:24:16:35 | target.value | angular.ts:16:24:16:35 | target.value | angular.ts:16:24:16:35 | target.value | $@ is reinterpreted as HTML without escaping meta-characters. | angular.ts:16:24:16:35 | target.value | DOM text |
294+
| angular.ts:20:24:20:37 | form.value.foo | angular.ts:20:24:20:33 | form.value | angular.ts:20:24:20:37 | form.value.foo | $@ is reinterpreted as HTML without escaping meta-characters. | angular.ts:20:24:20:33 | form.value | DOM text |
286295
| forms.js:9:31:9:40 | values.foo | forms.js:8:23:8:28 | values | forms.js:9:31:9:40 | values.foo | $@ is reinterpreted as HTML without escaping meta-characters. | forms.js:8:23:8:28 | values | DOM text |
287296
| forms.js:12:31:12:40 | values.bar | forms.js:11:24:11:29 | values | forms.js:12:31:12:40 | values.bar | $@ is reinterpreted as HTML without escaping meta-characters. | forms.js:11:24:11:29 | values | DOM text |
288297
| forms.js:25:23:25:34 | values.email | forms.js:24:15:24:20 | values | forms.js:25:23:25:34 | values.email | $@ is reinterpreted as HTML without escaping meta-characters. | forms.js:24:15:24:20 | values | DOM text |

javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/angular.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ export class Foo {
1717
}
1818

1919
blah(form: NgForm) {
20-
document.write(form.value.foo); // NOT OK [INCONSISTENCY]
20+
document.write(form.value.foo); // NOT OK
2121
}
2222
}

0 commit comments

Comments
 (0)