Skip to content

Commit cfaa31d

Browse files
committed
Add tests for HttpServletResponse.setContentType
1 parent 9f3572d commit cfaa31d

File tree

1 file changed

+26
-1
lines changed
  • java/ql/test/query-tests/security/CWE-079/semmle/tests

1 file changed

+26
-1
lines changed

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

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import javax.servlet.http.HttpServletResponse;
1313

1414
public class XSS extends HttpServlet {
15-
protected void doGet(HttpServletRequest request, HttpServletResponse response)
15+
protected void doGet(HttpServletRequest request, HttpServletResponse response, boolean safeContentType, boolean getWriter)
1616
throws ServletException, IOException {
1717
// BAD: a request parameter is written directly to the Servlet response stream
1818
response.getWriter()
@@ -38,6 +38,31 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
3838

3939
// GOOD: sanitizer
4040
response.getOutputStream().write(hudson.Util.escape(request.getPathInfo()).getBytes()); // safe
41+
42+
if(safeContentType) {
43+
if(getWriter) {
44+
// GOOD: set content-type to something safe
45+
response.setContentType("text/plain");
46+
response.getWriter().print(request.getPathInfo()); // $ SPURIOUS: xss
47+
}
48+
else {
49+
// GOOD: set content-type to something safe
50+
response.setContentType("text/plain");
51+
response.getOutputStream().write(request.getPathInfo()); // $ SPURIOUS: xss
52+
}
53+
}
54+
else {
55+
if(getWriter) {
56+
// BAD: set content-type to something that is not safe
57+
response.setContentType("text/html");
58+
response.getWriter().print(request.getPathInfo()); // $ xss
59+
}
60+
else {
61+
// BAD: set content-type to something that is not safe
62+
response.setContentType("text/html");
63+
response.getOutputStream().write(request.getPathInfo()); // $ xss
64+
}
65+
}
4166
}
4267

4368
/**

0 commit comments

Comments
 (0)