Skip to content

Commit 995e331

Browse files
committed
JS: Add test for res.locals flow to template
1 parent 04bdba8 commit 995e331

File tree

6 files changed

+30
-4
lines changed

6 files changed

+30
-4
lines changed

javascript/ql/test/library-tests/frameworks/Templating/Xss.expected

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ nodes
3333
| app.js:59:38:59:74 | req.que ... ringRaw |
3434
| app.js:66:18:66:34 | req.query.rawHtml |
3535
| app.js:66:18:66:34 | req.query.rawHtml |
36+
| projectA/src/index.js:6:38:6:53 | req.query.taintA |
37+
| projectA/src/index.js:6:38:6:53 | req.query.taintA |
3638
| projectA/src/index.js:12:16:12:30 | req.query.sinkA |
3739
| projectA/src/index.js:12:16:12:30 | req.query.sinkA |
3840
| projectA/src/index.js:17:16:17:30 | req.query.sinkA |
@@ -48,6 +50,9 @@ nodes
4850
| projectA/views/main.ejs:2:1:2:12 | <%- sinkA %> |
4951
| projectA/views/main.ejs:2:1:2:12 | <%- sinkA %> |
5052
| projectA/views/main.ejs:2:5:2:9 | sinkA |
53+
| projectA/views/main.ejs:5:1:5:26 | <%- taintedInMiddleware %> |
54+
| projectA/views/main.ejs:5:1:5:26 | <%- taintedInMiddleware %> |
55+
| projectA/views/main.ejs:5:5:5:23 | taintedInMiddleware |
5156
| projectA/views/subfolder/index.ejs:2:1:2:12 | <%- sinkA %> |
5257
| projectA/views/subfolder/index.ejs:2:1:2:12 | <%- sinkA %> |
5358
| projectA/views/subfolder/index.ejs:2:5:2:9 | sinkA |
@@ -57,6 +62,8 @@ nodes
5762
| projectA/views/upward_traversal.ejs:1:1:1:12 | <%- sinkA %> |
5863
| projectA/views/upward_traversal.ejs:1:1:1:12 | <%- sinkA %> |
5964
| projectA/views/upward_traversal.ejs:1:5:1:9 | sinkA |
65+
| projectB/src/index.js:6:38:6:53 | req.query.taintB |
66+
| projectB/src/index.js:6:38:6:53 | req.query.taintB |
6067
| projectB/src/index.js:13:16:13:30 | req.query.sinkB |
6168
| projectB/src/index.js:13:16:13:30 | req.query.sinkB |
6269
| projectB/src/index.js:18:16:18:30 | req.query.sinkB |
@@ -70,6 +77,9 @@ nodes
7077
| projectB/views/main.ejs:3:1:3:12 | <%- sinkB %> |
7178
| projectB/views/main.ejs:3:1:3:12 | <%- sinkB %> |
7279
| projectB/views/main.ejs:3:5:3:9 | sinkB |
80+
| projectB/views/main.ejs:5:1:5:26 | <%- taintedInMiddleware %> |
81+
| projectB/views/main.ejs:5:1:5:26 | <%- taintedInMiddleware %> |
82+
| projectB/views/main.ejs:5:5:5:23 | taintedInMiddleware |
7383
| projectB/views/subfolder/index.ejs:3:1:3:12 | <%- sinkB %> |
7484
| projectB/views/subfolder/index.ejs:3:1:3:12 | <%- sinkB %> |
7585
| projectB/views/subfolder/index.ejs:3:5:3:9 | sinkB |
@@ -183,6 +193,8 @@ edges
183193
| app.js:66:18:66:34 | req.query.rawHtml | views/angularjs_include.ejs:3:9:3:15 | rawHtml |
184194
| app.js:66:18:66:34 | req.query.rawHtml | views/angularjs_sinks.ejs:4:13:4:19 | rawHtml |
185195
| app.js:66:18:66:34 | req.query.rawHtml | views/angularjs_sinks.ejs:4:13:4:19 | rawHtml |
196+
| projectA/src/index.js:6:38:6:53 | req.query.taintA | projectA/views/main.ejs:5:5:5:23 | taintedInMiddleware |
197+
| projectA/src/index.js:6:38:6:53 | req.query.taintA | projectA/views/main.ejs:5:5:5:23 | taintedInMiddleware |
186198
| projectA/src/index.js:12:16:12:30 | req.query.sinkA | projectA/views/main.ejs:2:5:2:9 | sinkA |
187199
| projectA/src/index.js:12:16:12:30 | req.query.sinkA | projectA/views/main.ejs:2:5:2:9 | sinkA |
188200
| projectA/src/index.js:17:16:17:30 | req.query.sinkA | projectA/views/main.ejs:2:5:2:9 | sinkA |
@@ -197,12 +209,16 @@ edges
197209
| projectA/src/index.js:47:16:47:30 | req.query.sinkA | projectA/views/upward_traversal.ejs:1:5:1:9 | sinkA |
198210
| projectA/views/main.ejs:2:5:2:9 | sinkA | projectA/views/main.ejs:2:1:2:12 | <%- sinkA %> |
199211
| projectA/views/main.ejs:2:5:2:9 | sinkA | projectA/views/main.ejs:2:1:2:12 | <%- sinkA %> |
212+
| projectA/views/main.ejs:5:5:5:23 | taintedInMiddleware | projectA/views/main.ejs:5:1:5:26 | <%- taintedInMiddleware %> |
213+
| projectA/views/main.ejs:5:5:5:23 | taintedInMiddleware | projectA/views/main.ejs:5:1:5:26 | <%- taintedInMiddleware %> |
200214
| projectA/views/subfolder/index.ejs:2:5:2:9 | sinkA | projectA/views/subfolder/index.ejs:2:1:2:12 | <%- sinkA %> |
201215
| projectA/views/subfolder/index.ejs:2:5:2:9 | sinkA | projectA/views/subfolder/index.ejs:2:1:2:12 | <%- sinkA %> |
202216
| projectA/views/subfolder/other.ejs:2:5:2:9 | sinkA | projectA/views/subfolder/other.ejs:2:1:2:12 | <%- sinkA %> |
203217
| projectA/views/subfolder/other.ejs:2:5:2:9 | sinkA | projectA/views/subfolder/other.ejs:2:1:2:12 | <%- sinkA %> |
204218
| projectA/views/upward_traversal.ejs:1:5:1:9 | sinkA | projectA/views/upward_traversal.ejs:1:1:1:12 | <%- sinkA %> |
205219
| projectA/views/upward_traversal.ejs:1:5:1:9 | sinkA | projectA/views/upward_traversal.ejs:1:1:1:12 | <%- sinkA %> |
220+
| projectB/src/index.js:6:38:6:53 | req.query.taintB | projectB/views/main.ejs:5:5:5:23 | taintedInMiddleware |
221+
| projectB/src/index.js:6:38:6:53 | req.query.taintB | projectB/views/main.ejs:5:5:5:23 | taintedInMiddleware |
206222
| projectB/src/index.js:13:16:13:30 | req.query.sinkB | projectB/views/main.ejs:3:5:3:9 | sinkB |
207223
| projectB/src/index.js:13:16:13:30 | req.query.sinkB | projectB/views/main.ejs:3:5:3:9 | sinkB |
208224
| projectB/src/index.js:18:16:18:30 | req.query.sinkB | projectB/views/main.ejs:3:5:3:9 | sinkB |
@@ -215,6 +231,8 @@ edges
215231
| projectB/src/index.js:43:16:43:30 | req.query.sinkB | projectB/views/subfolder/other.ejs:3:5:3:9 | sinkB |
216232
| projectB/views/main.ejs:3:5:3:9 | sinkB | projectB/views/main.ejs:3:1:3:12 | <%- sinkB %> |
217233
| projectB/views/main.ejs:3:5:3:9 | sinkB | projectB/views/main.ejs:3:1:3:12 | <%- sinkB %> |
234+
| projectB/views/main.ejs:5:5:5:23 | taintedInMiddleware | projectB/views/main.ejs:5:1:5:26 | <%- taintedInMiddleware %> |
235+
| projectB/views/main.ejs:5:5:5:23 | taintedInMiddleware | projectB/views/main.ejs:5:1:5:26 | <%- taintedInMiddleware %> |
218236
| projectB/views/subfolder/index.ejs:3:5:3:9 | sinkB | projectB/views/subfolder/index.ejs:3:1:3:12 | <%- sinkB %> |
219237
| projectB/views/subfolder/index.ejs:3:5:3:9 | sinkB | projectB/views/subfolder/index.ejs:3:1:3:12 | <%- sinkB %> |
220238
| projectB/views/subfolder/other.ejs:3:5:3:9 | sinkB | projectB/views/subfolder/other.ejs:3:1:3:12 | <%- sinkB %> |
@@ -253,12 +271,14 @@ edges
253271
#select
254272
| projectA/views/main.ejs:2:1:2:12 | <%- sinkA %> | projectA/src/index.js:12:16:12:30 | req.query.sinkA | projectA/views/main.ejs:2:1:2:12 | <%- sinkA %> | Cross-site scripting vulnerability due to $@. | projectA/src/index.js:12:16:12:30 | req.query.sinkA | user-provided value |
255273
| projectA/views/main.ejs:2:1:2:12 | <%- sinkA %> | projectA/src/index.js:17:16:17:30 | req.query.sinkA | projectA/views/main.ejs:2:1:2:12 | <%- sinkA %> | Cross-site scripting vulnerability due to $@. | projectA/src/index.js:17:16:17:30 | req.query.sinkA | user-provided value |
274+
| projectA/views/main.ejs:5:1:5:26 | <%- taintedInMiddleware %> | projectA/src/index.js:6:38:6:53 | req.query.taintA | projectA/views/main.ejs:5:1:5:26 | <%- taintedInMiddleware %> | Cross-site scripting vulnerability due to $@. | projectA/src/index.js:6:38:6:53 | req.query.taintA | user-provided value |
256275
| projectA/views/subfolder/index.ejs:2:1:2:12 | <%- sinkA %> | projectA/src/index.js:22:16:22:30 | req.query.sinkA | projectA/views/subfolder/index.ejs:2:1:2:12 | <%- sinkA %> | Cross-site scripting vulnerability due to $@. | projectA/src/index.js:22:16:22:30 | req.query.sinkA | user-provided value |
257276
| projectA/views/subfolder/other.ejs:2:1:2:12 | <%- sinkA %> | projectA/src/index.js:37:16:37:30 | req.query.sinkA | projectA/views/subfolder/other.ejs:2:1:2:12 | <%- sinkA %> | Cross-site scripting vulnerability due to $@. | projectA/src/index.js:37:16:37:30 | req.query.sinkA | user-provided value |
258277
| projectA/views/subfolder/other.ejs:2:1:2:12 | <%- sinkA %> | projectA/src/index.js:42:16:42:30 | req.query.sinkA | projectA/views/subfolder/other.ejs:2:1:2:12 | <%- sinkA %> | Cross-site scripting vulnerability due to $@. | projectA/src/index.js:42:16:42:30 | req.query.sinkA | user-provided value |
259278
| projectA/views/upward_traversal.ejs:1:1:1:12 | <%- sinkA %> | projectA/src/index.js:47:16:47:30 | req.query.sinkA | projectA/views/upward_traversal.ejs:1:1:1:12 | <%- sinkA %> | Cross-site scripting vulnerability due to $@. | projectA/src/index.js:47:16:47:30 | req.query.sinkA | user-provided value |
260279
| projectB/views/main.ejs:3:1:3:12 | <%- sinkB %> | projectB/src/index.js:13:16:13:30 | req.query.sinkB | projectB/views/main.ejs:3:1:3:12 | <%- sinkB %> | Cross-site scripting vulnerability due to $@. | projectB/src/index.js:13:16:13:30 | req.query.sinkB | user-provided value |
261280
| projectB/views/main.ejs:3:1:3:12 | <%- sinkB %> | projectB/src/index.js:18:16:18:30 | req.query.sinkB | projectB/views/main.ejs:3:1:3:12 | <%- sinkB %> | Cross-site scripting vulnerability due to $@. | projectB/src/index.js:18:16:18:30 | req.query.sinkB | user-provided value |
281+
| projectB/views/main.ejs:5:1:5:26 | <%- taintedInMiddleware %> | projectB/src/index.js:6:38:6:53 | req.query.taintB | projectB/views/main.ejs:5:1:5:26 | <%- taintedInMiddleware %> | Cross-site scripting vulnerability due to $@. | projectB/src/index.js:6:38:6:53 | req.query.taintB | user-provided value |
262282
| projectB/views/subfolder/index.ejs:3:1:3:12 | <%- sinkB %> | projectB/src/index.js:23:16:23:30 | req.query.sinkB | projectB/views/subfolder/index.ejs:3:1:3:12 | <%- sinkB %> | Cross-site scripting vulnerability due to $@. | projectB/src/index.js:23:16:23:30 | req.query.sinkB | user-provided value |
263283
| projectB/views/subfolder/other.ejs:3:1:3:12 | <%- sinkB %> | projectB/src/index.js:38:16:38:30 | req.query.sinkB | projectB/views/subfolder/other.ejs:3:1:3:12 | <%- sinkB %> | Cross-site scripting vulnerability due to $@. | projectB/src/index.js:38:16:38:30 | req.query.sinkB | user-provided value |
264284
| projectB/views/subfolder/other.ejs:3:1:3:12 | <%- sinkB %> | projectB/src/index.js:43:16:43:30 | req.query.sinkB | projectB/views/subfolder/other.ejs:3:1:3:12 | <%- sinkB %> | Cross-site scripting vulnerability due to $@. | projectB/src/index.js:43:16:43:30 | req.query.sinkB | user-provided value |

javascript/ql/test/library-tests/frameworks/Templating/projectA/src/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ const express = require('express');
33
const app = express();
44

55
app.use((req, res, next) => {
6-
7-
6+
res.locals.taintedInMiddleware = req.query.taintA;
7+
next();
88
});
99

1010
app.get('/fooA', (req, res) => {
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
Project A
22
<%- sinkA %>
33
<%= sinkB %>
4+
5+
<%- taintedInMiddleware %>

javascript/ql/test/library-tests/frameworks/Templating/projectB/src/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ const express = require('express');
33
const app = express();
44

55
app.use((req, res, next) => {
6-
7-
6+
res.locals.taintedInMiddleware = req.query.taintB;
7+
next();
88
});
99

1010
app.get('/fooA', (req, res) => {
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
Project B
22
<%= sinkA %>
33
<%- sinkB %>
4+
5+
<%- taintedInMiddleware %>

javascript/ql/test/library-tests/frameworks/Templating/test.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,12 @@ getTargetFile
4040
| views/ejs_sinks.ejs:24:13:24:53 | include ... Html }) | views/ejs_include1.ejs:0:0:0:0 | views/ejs_include1.ejs |
4141
xssSink
4242
| projectA/views/main.ejs:2:1:2:12 | <%- sinkA %> |
43+
| projectA/views/main.ejs:5:1:5:26 | <%- taintedInMiddleware %> |
4344
| projectA/views/subfolder/index.ejs:2:1:2:12 | <%- sinkA %> |
4445
| projectA/views/subfolder/other.ejs:2:1:2:12 | <%- sinkA %> |
4546
| projectA/views/upward_traversal.ejs:1:1:1:12 | <%- sinkA %> |
4647
| projectB/views/main.ejs:3:1:3:12 | <%- sinkB %> |
48+
| projectB/views/main.ejs:5:1:5:26 | <%- taintedInMiddleware %> |
4749
| projectB/views/subfolder/index.ejs:3:1:3:12 | <%- sinkB %> |
4850
| projectB/views/subfolder/other.ejs:3:1:3:12 | <%- sinkB %> |
4951
| views/angularjs_include.ejs:3:5:3:18 | <%- rawHtml %> |

0 commit comments

Comments
 (0)