Me han dicho que al utilizar HttpServletRequest.getQueryString()
en un encabezado de respuesta hace que mi aplicación sea susceptible a los ataques de división de respuesta HTTP, pero no veo cómo.
Está claro en el caso de getParameter(String)
, que decodifica los valores codificados en porcentaje, pero getQueryString()
no lo hace. De la documentación:
El valor no está descodificado por el contenedor.
Fragmento de código fuente que ilustra lo que estoy haciendo:
String path = "some_url";
String qs = req.getQueryString();
if (qs != null)
path += "?" + qs;
// response instanceof HttpServletResponse
response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
response.setHeader("Location", path);
Intenté reproducir el problema y acabo de hacer que las nuevas líneas codificadas en porcentaje se repitan en la respuesta. Cuando cambio el código a getParameter(…)
, funciona como se esperaba (excepto que mi contenedor es lo suficientemente bueno como para quitar las nuevas líneas del valor del encabezado, pero en teoría al menos funciona). Esta pregunta similar sobre Desbordamiento de pila pregunta Lo mismo, y un comentario a la respuesta que señala que getQueryString()
no se decodifica no obtuvo respuesta.
¿Me estoy perdiendo algo aquí? ¿O es incorrecto el consejo?