有人告诉我,HttpServletRequest.getQueryString()在响应标头中使用会使我的应用程序容易受到 HTTP 响应拆分攻击,但我只是不知道如何。
在 的情况下很清楚getParameter(String),它解码百分比编码的值,但getQueryString()不这样做。从文档中:
该值不被容器解码。
说明我在做什么的源代码片段:
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);
我试图重现这个问题,我只是得到百分比编码的换行符在响应中回显给我。当我将代码更改为 时getParameter(…),它按预期工作(除了我的容器足以从标头值中删除换行符,但理论上至少它可以工作)。Stack Overflow 上的这个类似问题提出了同样的问题,并且对答案的评论指出getQueryString()不解码没有得到回应。
我在这里错过了什么吗?还是我的建议错了?