将request.getQueryString放在response.sendRedirect中会使您容易受到HTTP Response Splitting的攻击吗?

时间:2015-06-17 21:18:57

标签: java security http servlets

我制作了这个最小的JSP:

<%
    response.sendRedirect(request.getQueryString());
%>

显然它不是很有用,但它足以触发FindBugs警告我也在使用真正的JSP:

  

此代码直接将HTTP参数写入HTTP标头   允许HTTP响应拆分漏洞

但是,我非常确定FindBugs在这里是错误的。每the docs getQueryString不会对查询字符串进行解码,并且我不相信编码的查询字符串可以包含CRLF,因为它必须位于请求行中。据我所知,CRLF无法进入那里。

如果查询字符串为空,这个玩具页面会出现问题,并且该字符串将被解释为相对或不相关,这可能不是很好,但这里是否存在HTTP响应拆分漏洞?

如果有,我们怎么能阻止它?

1 个答案:

答案 0 :(得分:0)

简短回答是肯定的。但是有更多的安全问题,而不仅仅是响应拆分(也就是头部或CRLF注入)。还有一个“未经验证的重定向”问题。攻击者可以将您的客户通过您的站点重定向到其他危险站点(网络钓鱼,利用等)。

解决方案是创建白名单并检查当前目标是否在白名单中。这可以防止这两个问题对值进行编码只是响应拆分问题的解决方案,但不能解决重定向问题。