我正在使用静态分析工具,在以下代码中找到错误并报告警告
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编码时删除警告。
答案 0 :(得分:2)
我相信在第二种情况下,警告会消失,因为URLEncoder.encode
会删除可能包含在您从请求中获取的参数中的CR和LF。
您可能需要阅读this以了解HTTP响应拆分漏洞的背景
我还相信,由于调用URLEncoder.encode
会返回一个新对象,因此FindBugs不会将该变量重新计算为HTTP请求内容,因此它认为它是安全的。
答案 1 :(得分:1)
我认为您的redirectToXXX
包含回车或换行符。请删除它,然后重试。