2012-05-09 63 views
2

我使用的是静态分析工具,发现错误和报告下面的代码警告encodeRedirectURL产生警告

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警告。

+1

redirectToXXX从哪里来?你还用什么工具? – Carlo

+0

redirectToXXX包含来自HttpServletRequest的一些参数,我使用FindBugs进行分析。 – comatose

+0

参数中有CRLF。删除它们并尝试。 – Dandy

回答

2

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

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

+0

没有使用警告是的,删除CR和LF删除警告,我用redirectToXXX.replaceAll(“(\\ r \\ n)”,“”)替换CR和LF,但我是不知道是否应该只删除CR和LF的组合,或者删除CR或LF,无论它们出现在哪里(比如这个redirectToXXX.replaceAll(“(\\ r | \\ n)”,“”);? – comatose

+0

那么,HTTP指定一条新线路由CRLF(\ r \ n)代表,但我相信将它们全部删除并不会有什么伤害。 – Carlo

1

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

相关问题