Skip to content

Commit e1c34c1

Browse files
committed
add all jquery plugin parameters as source to js/html-constructed-from-input
1 parent dde7e9e commit e1c34c1

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ module UnsafeHtmlConstruction {
3434
* A jQuery plugin options object, seen as a source for unsafe HTML constructed from input.
3535
*/
3636
class JQueryPluginOptionsAsSource extends Source {
37-
JQueryPluginOptionsAsSource() { this instanceof UnsafeJQueryPlugin::JQueryPluginOptions }
37+
JQueryPluginOptionsAsSource() { this = any(JQuery::JQueryPluginMethod meth).getAParameter() }
3838
}
3939

4040
/**

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
nodes
2+
| jquery-plugin.js:11:27:11:31 | stuff |
3+
| jquery-plugin.js:11:27:11:31 | stuff |
24
| jquery-plugin.js:11:34:11:40 | options |
35
| jquery-plugin.js:11:34:11:40 | options |
46
| jquery-plugin.js:12:31:12:37 | options |
57
| jquery-plugin.js:12:31:12:41 | options.foo |
68
| jquery-plugin.js:12:31:12:41 | options.foo |
9+
| jquery-plugin.js:14:31:14:35 | stuff |
10+
| jquery-plugin.js:14:31:14:35 | stuff |
711
| main.js:1:55:1:55 | s |
812
| main.js:1:55:1:55 | s |
913
| main.js:2:29:2:29 | s |
@@ -58,6 +62,10 @@ nodes
5862
| typed.ts:17:29:17:29 | s |
5963
| typed.ts:17:29:17:29 | s |
6064
edges
65+
| jquery-plugin.js:11:27:11:31 | stuff | jquery-plugin.js:14:31:14:35 | stuff |
66+
| jquery-plugin.js:11:27:11:31 | stuff | jquery-plugin.js:14:31:14:35 | stuff |
67+
| jquery-plugin.js:11:27:11:31 | stuff | jquery-plugin.js:14:31:14:35 | stuff |
68+
| jquery-plugin.js:11:27:11:31 | stuff | jquery-plugin.js:14:31:14:35 | stuff |
6169
| jquery-plugin.js:11:34:11:40 | options | jquery-plugin.js:12:31:12:37 | options |
6270
| jquery-plugin.js:11:34:11:40 | options | jquery-plugin.js:12:31:12:37 | options |
6371
| jquery-plugin.js:12:31:12:37 | options | jquery-plugin.js:12:31:12:41 | options.foo |
@@ -115,6 +123,7 @@ edges
115123
| typed.ts:16:15:16:21 | id("x") | typed.ts:16:11:16:21 | s |
116124
#select
117125
| jquery-plugin.js:12:31:12:41 | options.foo | jquery-plugin.js:11:34:11:40 | options | jquery-plugin.js:12:31:12:41 | options.foo | $@ based on $@ might later cause $@. | jquery-plugin.js:12:31:12:41 | options.foo | HTML construction | jquery-plugin.js:11:34:11:40 | options | library input | jquery-plugin.js:12:20:12:53 | "<span> ... /span>" | cross-site scripting |
126+
| jquery-plugin.js:14:31:14:35 | stuff | jquery-plugin.js:11:27:11:31 | stuff | jquery-plugin.js:14:31:14:35 | stuff | $@ based on $@ might later cause $@. | jquery-plugin.js:14:31:14:35 | stuff | HTML construction | jquery-plugin.js:11:27:11:31 | stuff | library input | jquery-plugin.js:14:20:14:47 | "<span> ... /span>" | cross-site scripting |
118127
| main.js:2:29:2:29 | s | main.js:1:55:1:55 | s | main.js:2:29:2:29 | s | $@ based on $@ might later cause $@. | main.js:2:29:2:29 | s | HTML construction | main.js:1:55:1:55 | s | library input | main.js:3:49:3:52 | html | cross-site scripting |
119128
| main.js:7:49:7:49 | s | main.js:6:49:6:49 | s | main.js:7:49:7:49 | s | $@ based on $@ might later cause $@. | main.js:7:49:7:49 | s | XML parsing | main.js:6:49:6:49 | s | library input | main.js:8:48:8:66 | doc.documentElement | cross-site scripting |
120129
| main.js:12:49:12:49 | s | main.js:11:60:11:60 | s | main.js:12:49:12:49 | s | $@ based on $@ might later cause $@. | main.js:12:49:12:49 | s | XML parsing | main.js:11:60:11:60 | s | library input | main.js:16:21:16:35 | xml.cloneNode() | cross-site scripting |

javascript/ql/test/query-tests/Security/CWE-079/UnsafeHtmlConstruction/jquery-plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@
1111
$.fn.myPlugin = function (stuff, options) {
1212
$("#foo").html("<span>" + options.foo + "</span>"); // NOT OK
1313

14-
$("#foo").html("<span>" + stuff + "</span>"); // NOT OK - but not found [INCONSISTENCY]
14+
$("#foo").html("<span>" + stuff + "</span>"); // NOT OK
1515
}

0 commit comments

Comments
 (0)