我已經在我的服務器上運行了安全掃描并收到了一些 CRLF 漏洞利用警告。
因此,按照建議,我已經清理了所有查詢引數輸入,如下所示。
var encodedStringSafeFromCRLF = Server.UrlDecode(Request.QueryString["address"])
.Replace("\r", string.Empty)
.Replace("
", string.Empty)
.Replace("
", string.Empty)
.Replace("\n", string.Empty)
.Replace("
", string.Empty)
.Replace("
", string.Empty);
假設一個真正的用戶通過“地址”查詢引數向我發送地址。
例子 -
https://mywebsite.com/details?instId=151711&address=24 House Road
SomePlace
Country
由于將從上述字串中洗掉“ ”,因此地址現在將變為“24HouseRoadSomePlaceCountry”,這不是我的預期。
我應該如何處理?如果我對 CRLF 進行代碼更改,這會改變輸入的解釋方式。如果輸入字串沒有被清理,那么它將打開我的服務器進行 CRLF 攻擊。
這里有什么建議嗎?
uj5u.com熱心網友回復:
如果您確實需要用戶提供帶有 CRLF 序列的資料,那么我不會過濾這些。與往常一樣,永遠不要以任何方式信任用戶提供的資料:不要使用它來生成 HTTP 標頭、回應或寫入日志檔案。
一般來說,反過來過濾會更安全:指定您愿意接受的所有字符,并過濾掉其他所有字符。
如果您需要將資料寫入日志,例如,您可以先對資料進行 URL 編碼,以便永遠不會在那里寫入“裸”CR LF。
我可能在內部指定只使用 \n 作為換行符,并在內部將所有 \r、\n 和 \r\n 轉換為僅一種表示形式 \n。因此其余代碼不必處理所有版本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/424694.html
