12
12
import javax .servlet .http .HttpServletResponse ;
13
13
14
14
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 , int setContentMethod )
16
16
throws ServletException , IOException {
17
17
// BAD: a request parameter is written directly to the Servlet response stream
18
18
response .getWriter ()
@@ -38,6 +38,79 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
38
38
39
39
// GOOD: sanitizer
40
40
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
+ }
41
114
}
42
115
43
116
/**
0 commit comments