java的HTTP响应拆分

Non*_*ame 5 java httpresponse response-headers

在以下情况下是否可以进行 HTTP 响应拆分:

String requestFilename = request.getParameter("name");

response.addHeader("content-disposition", "attachment; filename=" + requestFilename);
Run Code Online (Sandbox Code Playgroud)

我直接将未经处理的请求参数附加到响应标头。

我的问题是,通过使用 CRLF 字符,我们可以将自己的标头插入响应中。

到目前为止,我已经尝试过\r\n%0D%0A但它们不起作用。

response.addHeader()不受此类攻击?
有人可以向我解释如何执行这种攻击吗?

Nic*_*olt 1

在您的情况下,http 响应分割是否可行将取决于托管代码的 servlet 容器。

例如,Tomcat 通过处理响应拆分(至少对于传入请求)的CORS 过滤器来防范常见的安全漏洞。

Tomcat 还会过滤写入响应的值 - 请参阅Http11OutputBuffer (第 383 行),这可以防止损坏的值以某种方式最终作为标头值返回到客户端。

永远不要说永远,但如果您使用 Tomcat 等流行 Web 服务器的最新版本,您应该可以避免响应分裂等众所周知的漏洞。