在以下情况下是否可以拆分HTTP响应:
String requestFilename = request.getParameter("name");
response.addHeader("content-disposition", "attachment; filename=" + requestFilename);
我将未经过处理的请求参数直接附加到响应头。
我的问题是,通过使用CRLF字符,我们可以在响应中插入我们自己的标头。
到目前为止,我已经尝试过\r\n
和%0D%0A
,但它们不起作用。
response.addHeader()
不受这种攻击吗?有人可以向我解释如何执行这种攻击吗?
您是否可以拆分http响应,将取决于托管代码的servlet容器。
例如,Tomcat防范常见的安全漏洞,其中CORS Filter处理响应拆分(至少对于传入的请求而言。)>
Tomcat还过滤了写入响应的值-请参阅Http11OutputBuffer (line 383),这可以防止损坏的值以某种方式最终作为标头值返回给客户端。
不要说永远不要,但是如果您使用的是诸如Tomcat之类的流行Web服务器的最新版本,则应该避免使用响应拆分等众所周知的漏洞。