2012-05-09 102 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包含回車或換行符。請刪除並重試。

相關問題