Skip to content

Commit b3c186c

Browse files
committed
Convert XSS test to inline expectations
1 parent 267e369 commit b3c186c

File tree

4 files changed

+36
-19
lines changed

4 files changed

+36
-19
lines changed
Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +0,0 @@
1-
edges
2-
| XSS.java:23:21:23:48 | getParameter(...) : String | XSS.java:23:5:23:70 | ... + ... |
3-
| XSS.java:38:67:38:87 | getPathInfo(...) : String | XSS.java:38:30:38:87 | ... + ... |
4-
| XSS.java:41:36:41:56 | getPathInfo(...) : String | XSS.java:41:36:41:67 | getBytes(...) |
5-
nodes
6-
| XSS.java:23:5:23:70 | ... + ... | semmle.label | ... + ... |
7-
| XSS.java:23:21:23:48 | getParameter(...) : String | semmle.label | getParameter(...) : String |
8-
| XSS.java:38:30:38:87 | ... + ... | semmle.label | ... + ... |
9-
| XSS.java:38:67:38:87 | getPathInfo(...) : String | semmle.label | getPathInfo(...) : String |
10-
| XSS.java:41:36:41:56 | getPathInfo(...) : String | semmle.label | getPathInfo(...) : String |
11-
| XSS.java:41:36:41:67 | getBytes(...) | semmle.label | getBytes(...) |
12-
#select
13-
| XSS.java:23:5:23:70 | ... + ... | XSS.java:23:21:23:48 | getParameter(...) : String | XSS.java:23:5:23:70 | ... + ... | Cross-site scripting vulnerability due to $@. | XSS.java:23:21:23:48 | getParameter(...) | user-provided value |
14-
| XSS.java:38:30:38:87 | ... + ... | XSS.java:38:67:38:87 | getPathInfo(...) : String | XSS.java:38:30:38:87 | ... + ... | Cross-site scripting vulnerability due to $@. | XSS.java:38:67:38:87 | getPathInfo(...) | user-provided value |
15-
| XSS.java:41:36:41:67 | getBytes(...) | XSS.java:41:36:41:56 | getPathInfo(...) : String | XSS.java:41:36:41:67 | getBytes(...) | Cross-site scripting vulnerability due to $@. | XSS.java:41:36:41:56 | getPathInfo(...) | user-provided value |

java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
2020
throws ServletException, IOException {
2121
// BAD: a request parameter is written directly to the Servlet response stream
2222
response.getWriter().print(
23-
"The page \"" + request.getParameter("page") + "\" was not found.");
23+
"The page \"" + request.getParameter("page") + "\" was not found."); // $xss
2424

2525
// GOOD: servlet API encodes the error message HTML for the HTML context
2626
response.sendError(HttpServletResponse.SC_NOT_FOUND,
@@ -35,10 +35,10 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
3535
"The page \"" + capitalizeName(request.getParameter("page")) + "\" was not found.");
3636

3737
// BAD: outputting the path of the resource
38-
response.getWriter().print("The path section of the URL was " + request.getPathInfo());
38+
response.getWriter().print("The path section of the URL was " + request.getPathInfo()); // $xss
3939

4040
// BAD: typical XSS, this time written to an OutputStream instead of a Writer
41-
response.getOutputStream().write(request.getPathInfo().getBytes());
41+
response.getOutputStream().write(request.getPathInfo().getBytes()); // $xss
4242
}
4343

4444

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import java
2+
import semmle.code.java.dataflow.FlowSources
3+
import semmle.code.java.security.XSS
4+
import TestUtilities.InlineExpectationsTest
5+
6+
class XSSConfig extends TaintTracking::Configuration {
7+
XSSConfig() { this = "XSSConfig" }
8+
9+
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
10+
11+
override predicate isSink(DataFlow::Node sink) { sink instanceof XssSink }
12+
13+
override predicate isSanitizer(DataFlow::Node node) { node instanceof XssSanitizer }
14+
15+
override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) {
16+
any(XssAdditionalTaintStep s).step(node1, node2)
17+
}
18+
}
19+
20+
class XssTest extends InlineExpectationsTest {
21+
XssTest() { this = "XssTest" }
22+
23+
override string getARelevantTag() { result = ["xss"] }
24+
25+
override predicate hasActualResult(Location location, string element, string tag, string value) {
26+
tag = "xss" and
27+
exists(DataFlow::Node src, DataFlow::Node sink, XSSConfig conf | conf.hasFlow(src, sink) |
28+
sink.getLocation() = location and
29+
element = sink.toString() and
30+
value = ""
31+
)
32+
}
33+
}

java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.qlref

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)