1212import javax .servlet .http .HttpServletResponse ;
1313
1414public class XSS extends HttpServlet {
15- protected void doGet (HttpServletRequest request , HttpServletResponse response )
15+ protected void doGet (HttpServletRequest request , HttpServletResponse response , boolean safeContentType , boolean getWriter , int setContentMethod )
1616 throws ServletException , IOException {
1717 // BAD: a request parameter is written directly to the Servlet response stream
1818 response .getWriter ()
@@ -38,6 +38,79 @@ 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+ if (setContentMethod == 0 ) {
45+ // GOOD: set content-type to something safe
46+ response .setContentType ("text/plain" );
47+ response .getWriter ().print (request .getPathInfo ());
48+ }
49+ else if (setContentMethod == 1 ) {
50+ // GOOD: set content-type to something safe
51+ response .setHeader ("Content-Type" , "text/plain" );
52+ response .getWriter ().print (request .getPathInfo ());
53+ }
54+ else {
55+ // GOOD: set content-type to something safe
56+ response .addHeader ("Content-Type" , "text/plain" );
57+ response .getWriter ().print (request .getPathInfo ());
58+ }
59+ }
60+ else {
61+ if (setContentMethod == 0 ) {
62+ // GOOD: set content-type to something safe
63+ response .setContentType ("text/plain" );
64+ response .getOutputStream ().write (request .getPathInfo ().getBytes ());
65+ }
66+ else if (setContentMethod == 1 ) {
67+ // GOOD: set content-type to something safe
68+ response .setHeader ("Content-Type" , "text/plain" );
69+ response .getOutputStream ().write (request .getPathInfo ().getBytes ());
70+ }
71+ else {
72+ // GOOD: set content-type to something safe
73+ response .addHeader ("Content-Type" , "text/plain" );
74+ response .getOutputStream ().write (request .getPathInfo ().getBytes ());
75+ }
76+ }
77+ }
78+ else {
79+ if (getWriter ) {
80+ if (setContentMethod == 0 ) {
81+ // BAD: set content-type to something that is not safe
82+ response .setContentType ("text/html" );
83+ response .getWriter ().print (request .getPathInfo ()); // $ xss
84+ }
85+ else if (setContentMethod == 1 ) {
86+ // BAD: set content-type to something that is not safe
87+ response .setHeader ("Content-Type" , "text/html" );
88+ response .getWriter ().print (request .getPathInfo ()); // $ xss
89+ }
90+ else {
91+ // BAD: set content-type to something that is not safe
92+ response .addHeader ("Content-Type" , "text/html" );
93+ response .getWriter ().print (request .getPathInfo ()); // $ xss
94+ }
95+ }
96+ else {
97+ if (setContentMethod == 0 ) {
98+ // BAD: set content-type to something that is not safe
99+ response .setContentType ("text/html" );
100+ response .getOutputStream ().write (request .getPathInfo ().getBytes ()); // $ xss
101+ }
102+ else if (setContentMethod == 1 ) {
103+ // BAD: set content-type to something that is not safe
104+ response .setHeader ("Content-Type" , "text/html" );
105+ response .getOutputStream ().write (request .getPathInfo ().getBytes ()); // $ xss
106+ }
107+ else {
108+ // BAD: set content-type to something that is not safe
109+ response .addHeader ("Content-Type" , "text/html" );
110+ response .getOutputStream ().write (request .getPathInfo ().getBytes ()); // $ xss
111+ }
112+ }
113+ }
41114 }
42115
43116 /**
0 commit comments