2

我正在使用静态分析工具来查找错误并报告以下代码的警告

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

警告说:

此代码直接将 HTTP 参数写入 HTTP 标头,从而导致 HTTP 响应拆分漏洞。

但是当我这样做时:

redirectToXXX= java.net.URLEncoder.encode(redirectToXXX.toString(),"ISO-8859-1");
response.sendRedirect(response.encodeRedirectURL(redirectToXXX));

警告消失。

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

4

2 回答 2

2

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

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

于 2012-05-09T12:42:53.257 回答
1

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

于 2012-05-09T12:38:11.037 回答