Mi è stato detto che usando HttpServletRequest.getQueryString()
in un'intestazione di risposta rende la mia applicazione suscettibile agli attacchi di divisione della risposta HTTP, ma non vedo come.
È chiaro nel caso di getParameter(String)
, che decodifica i valori con codifica percentuale, ma getQueryString()
non lo fa. Dalla documentazione:
The value is not decoded by the container.
Frammento di codice sorgente che illustra cosa sto facendo:
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);
Ho provato a riprodurre il problema, e ho appena ricevuto le nuove righe codificate per percentuale da me riecheggiate nella risposta. Quando cambio il codice in getParameter(…)
, funziona come previsto (eccetto il fatto che il mio contenitore è abbastanza carino da eliminare le righe nuove dal valore dell'intestazione, ma almeno in teoria funziona). Questa domanda simile su Stack Overflow chiede lo stesso, e un commento alla risposta indicando che getQueryString()
non decodifica non ha ricevuto risposta.
Mi sto perdendo qualcosa qui? O è il consiglio che ho sbagliato?