encodeRedirectURL生成警告

时间:2012-05-09 12:16:16

标签: java servlets urlencode

我正在使用静态分析工具,在以下代码中找到错误并报告警告

response.sendRedirect(response.encodeRedirectURL(redirectToXXX));

警告说:

  

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

但是当我这样做的时候:

redirectToXXX= java.net.URLEncoder.encode(redirectToXXX.toString(),"ISO-8859-1");
response.sendRedirect(response.encodeRedirectURL(redirectToXXX));
警告消失了。

我不明白的是encodeRedirectURL应该在必要时对网址进行编码,那么为什么它会生成警告,并在使用URLEncoder.encode编码时删除警告。

2 个答案:

答案 0 :(得分:2)

我相信在第二种情况下,警告会消失,因为URLEncoder.encode会删除可能包含在您从请求中获取的参数中的CR和LF。

您可能需要阅读this以了解HTTP响应拆分漏洞的背景 我还相信,由于调用URLEncoder.encode会返回一个新对象,因此FindBugs不会将该变量重新计算为HTTP请求内容,因此它认为它是安全的。

答案 1 :(得分:1)

我认为您的redirectToXXX包含回车或换行符。请删除它,然后重试。