@@ -26,25 +26,25 @@ public class UrlForwardTest extends HttpServlet implements Filter {
26
26
// Spring `ModelAndView` test cases
27
27
@ GetMapping ("/bad1" )
28
28
public ModelAndView bad1 (String url ) {
29
- return new ModelAndView (url ); // $ hasUrlForward
29
+ return new ModelAndView (url ); // $ hasTaintFlow
30
30
}
31
31
32
32
@ GetMapping ("/bad2" )
33
33
public ModelAndView bad2 (String url ) {
34
34
ModelAndView modelAndView = new ModelAndView ();
35
- modelAndView .setViewName (url ); // $ hasUrlForward
35
+ modelAndView .setViewName (url ); // $ hasTaintFlow
36
36
return modelAndView ;
37
37
}
38
38
39
39
// Spring `"forward:"` prefix test cases
40
40
@ GetMapping ("/bad3" )
41
41
public String bad3 (String url ) {
42
- return "forward:" + url + "/swagger-ui/index.html" ; // $ hasUrlForward
42
+ return "forward:" + url + "/swagger-ui/index.html" ; // $ hasTaintFlow
43
43
}
44
44
45
45
@ GetMapping ("/bad4" )
46
46
public ModelAndView bad4 (String url ) {
47
- ModelAndView modelAndView = new ModelAndView ("forward:" + url ); // $ hasUrlForward
47
+ ModelAndView modelAndView = new ModelAndView ("forward:" + url ); // $ hasTaintFlow
48
48
return modelAndView ;
49
49
}
50
50
@@ -60,7 +60,7 @@ public ModelAndView redirect(String url) {
60
60
@ GetMapping ("/bad5" )
61
61
public void bad5 (String url , HttpServletRequest request , HttpServletResponse response ) {
62
62
try {
63
- request .getRequestDispatcher (url ).include (request , response ); // $ hasUrlForward
63
+ request .getRequestDispatcher (url ).include (request , response ); // $ hasTaintFlow
64
64
} catch (ServletException e ) {
65
65
e .printStackTrace ();
66
66
} catch (IOException e ) {
@@ -71,7 +71,7 @@ public void bad5(String url, HttpServletRequest request, HttpServletResponse res
71
71
@ GetMapping ("/bad6" )
72
72
public void bad6 (String url , HttpServletRequest request , HttpServletResponse response ) {
73
73
try {
74
- request .getRequestDispatcher ("/WEB-INF/jsp/" + url + ".jsp" ).include (request , response ); // $ hasUrlForward
74
+ request .getRequestDispatcher ("/WEB-INF/jsp/" + url + ".jsp" ).include (request , response ); // $ hasTaintFlow
75
75
} catch (ServletException e ) {
76
76
e .printStackTrace ();
77
77
} catch (IOException e ) {
@@ -82,7 +82,7 @@ public void bad6(String url, HttpServletRequest request, HttpServletResponse res
82
82
@ GetMapping ("/bad7" )
83
83
public void bad7 (String url , HttpServletRequest request , HttpServletResponse response ) {
84
84
try {
85
- request .getRequestDispatcher ("/WEB-INF/jsp/" + url + ".jsp" ).forward (request , response ); // $ hasUrlForward
85
+ request .getRequestDispatcher ("/WEB-INF/jsp/" + url + ".jsp" ).forward (request , response ); // $ hasTaintFlow
86
86
} catch (ServletException e ) {
87
87
e .printStackTrace ();
88
88
} catch (IOException e ) {
@@ -106,7 +106,7 @@ public void good1(String url, HttpServletRequest request, HttpServletResponse re
106
106
public void bad8 (String urlPath , HttpServletRequest request , HttpServletResponse response ) {
107
107
try {
108
108
String url = "/pages" + urlPath ;
109
- request .getRequestDispatcher (url ).forward (request , response ); // $ hasUrlForward
109
+ request .getRequestDispatcher (url ).forward (request , response ); // $ hasTaintFlow
110
110
} catch (ServletException e ) {
111
111
e .printStackTrace ();
112
112
} catch (IOException e ) {
@@ -145,7 +145,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
145
145
String path = ((HttpServletRequest ) request ).getServletPath ();
146
146
// A sample payload "/%57EB-INF/web.xml" can bypass this `startsWith` check
147
147
if (path != null && !path .startsWith ("/WEB-INF" )) {
148
- request .getRequestDispatcher (path ).forward (request , response ); // $ hasUrlForward
148
+ request .getRequestDispatcher (path ).forward (request , response ); // $ hasTaintFlow
149
149
} else {
150
150
chain .doFilter (request , response );
151
151
}
@@ -158,7 +158,7 @@ public void doFilter2(ServletRequest request, ServletResponse response, FilterCh
158
158
String path = ((HttpServletRequest ) request ).getServletPath ();
159
159
160
160
if (path .startsWith (BASE_PATH ) && !path .contains (".." )) {
161
- request .getRequestDispatcher (path ).forward (request , response ); // $ hasUrlForward
161
+ request .getRequestDispatcher (path ).forward (request , response ); // $ hasTaintFlow
162
162
} else {
163
163
chain .doFilter (request , response );
164
164
}
@@ -190,7 +190,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
190
190
rd .forward (request , response );
191
191
} else {
192
192
ServletContext sc = cfg .getServletContext ();
193
- RequestDispatcher rd = sc .getRequestDispatcher (returnURL ); // $ hasUrlForward
193
+ RequestDispatcher rd = sc .getRequestDispatcher (returnURL ); // $ hasTaintFlow
194
194
rd .forward (request , response );
195
195
}
196
196
}
@@ -206,7 +206,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
206
206
RequestDispatcher rd = request .getRequestDispatcher ("/Login.jsp" );
207
207
rd .forward (request , response );
208
208
} else {
209
- RequestDispatcher rd = request .getRequestDispatcher (returnURL ); // $ hasUrlForward
209
+ RequestDispatcher rd = request .getRequestDispatcher (returnURL ); // $ hasTaintFlow
210
210
rd .forward (request , response );
211
211
}
212
212
}
@@ -233,7 +233,7 @@ protected void doHead1(HttpServletRequest request, HttpServletResponse response)
233
233
234
234
// A sample payload "/pages/welcome.jsp/../WEB-INF/web.xml" can bypass the `startsWith` check
235
235
if (path .startsWith (BASE_PATH )) {
236
- request .getServletContext ().getRequestDispatcher (path ).include (request , response ); // $ hasUrlForward
236
+ request .getServletContext ().getRequestDispatcher (path ).include (request , response ); // $ hasTaintFlow
237
237
}
238
238
}
239
239
@@ -244,7 +244,7 @@ protected void doHead2(HttpServletRequest request, HttpServletResponse response)
244
244
String path = request .getParameter ("path" );
245
245
246
246
if (path .startsWith (BASE_PATH ) && !path .contains (".." )) {
247
- request .getServletContext ().getRequestDispatcher (path ).include (request , response ); // $ hasUrlForward
247
+ request .getServletContext ().getRequestDispatcher (path ).include (request , response ); // $ hasTaintFlow
248
248
}
249
249
}
250
250
@@ -258,7 +258,7 @@ protected void doHead3(HttpServletRequest request, HttpServletResponse response)
258
258
Path requestedPath = Paths .get (BASE_PATH ).resolve (path ).normalize ();
259
259
260
260
if (requestedPath .startsWith (BASE_PATH )) {
261
- request .getServletContext ().getRequestDispatcher (requestedPath .toString ()).forward (request , response ); // $ hasUrlForward
261
+ request .getServletContext ().getRequestDispatcher (requestedPath .toString ()).forward (request , response ); // $ hasTaintFlow
262
262
}
263
263
}
264
264
@@ -270,7 +270,7 @@ protected void doHead4(HttpServletRequest request, HttpServletResponse response)
270
270
Path requestedPath = Paths .get (BASE_PATH ).resolve (path ).normalize ();
271
271
272
272
if (!requestedPath .startsWith ("/WEB-INF" ) && !requestedPath .startsWith ("/META-INF" )) {
273
- request .getServletContext ().getRequestDispatcher (requestedPath .toString ()).forward (request , response ); // $ hasUrlForward
273
+ request .getServletContext ().getRequestDispatcher (requestedPath .toString ()).forward (request , response ); // $ hasTaintFlow
274
274
}
275
275
}
276
276
@@ -281,7 +281,7 @@ protected void doHead5(HttpServletRequest request, HttpServletResponse response)
281
281
path = URLDecoder .decode (path , "UTF-8" );
282
282
283
283
if (!path .startsWith ("/WEB-INF/" ) && !path .contains (".." )) {
284
- request .getServletContext ().getRequestDispatcher (path ).include (request , response ); // $ hasUrlForward
284
+ request .getServletContext ().getRequestDispatcher (path ).include (request , response ); // $ hasTaintFlow
285
285
}
286
286
}
287
287
@@ -319,7 +319,7 @@ protected void doHead8(HttpServletRequest request, HttpServletResponse response)
319
319
String path = request .getParameter ("path" );
320
320
if (path .contains ("%" )){ // incorrect check
321
321
if (!path .startsWith ("/WEB-INF/" ) && !path .contains (".." )) {
322
- request .getServletContext ().getRequestDispatcher (path ).include (request , response ); // $ hasUrlForward
322
+ request .getServletContext ().getRequestDispatcher (path ).include (request , response ); // $ hasTaintFlow
323
323
}
324
324
}
325
325
}
@@ -362,14 +362,14 @@ protected void doHead11(HttpServletRequest request, HttpServletResponse response
362
362
}
363
363
364
364
if (!path .startsWith ("/WEB-INF/" ) && !path .contains (".." )) {
365
- request .getServletContext ().getRequestDispatcher (path ).include (request , response ); // $ SPURIOUS: hasUrlForward
365
+ request .getServletContext ().getRequestDispatcher (path ).include (request , response ); // $ SPURIOUS: hasTaintFlow
366
366
}
367
367
}
368
368
369
369
// BAD: `StaplerResponse.forward` without any checks
370
370
public void generateResponse (StaplerRequest req , StaplerResponse rsp , Object obj ) throws IOException , ServletException {
371
371
String url = req .getParameter ("target" );
372
- rsp .forward (obj , url , req ); // $ hasUrlForward
372
+ rsp .forward (obj , url , req ); // $ hasTaintFlow
373
373
}
374
374
375
375
// QHelp example
@@ -381,7 +381,7 @@ protected void doGet2(HttpServletRequest request, HttpServletResponse response)
381
381
ServletContext sc = cfg .getServletContext ();
382
382
383
383
// BAD: a request parameter is incorporated without validation into a URL forward
384
- sc .getRequestDispatcher (request .getParameter ("target" )).forward (request , response ); // $ hasUrlForward
384
+ sc .getRequestDispatcher (request .getParameter ("target" )).forward (request , response ); // $ hasTaintFlow
385
385
386
386
// GOOD: the request parameter is validated against a known fixed string
387
387
if (VALID_FORWARD .equals (request .getParameter ("target" ))) {
0 commit comments