5

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

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

response.addHeader("content-disposition", "attachment; filename=" + requestFilename);

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

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

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

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

4

1 回答 1

1

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

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

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

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

于 2020-01-07T17:04:50.940 回答