簡體   English   中英

如何允許換行符但仍然防止 CRLF 攻擊?

[英]How to allow newline characters but still prevent CRLF attack?

我在我的服務器上運行了安全掃描並收到了一些 CRLF 漏洞利用警告。

因此,按照建議,我已經清理了所有查詢參數輸入,如下所示。

var encodedStringSafeFromCRLF = Server.UrlDecode(Request.QueryString["address"])
                         .Replace("\r", string.Empty)
                         .Replace("%0d", string.Empty)
                         .Replace("%0D", string.Empty)
                         .Replace("\n", string.Empty)
                         .Replace("%0a", string.Empty)
                         .Replace("%0A", string.Empty);

比方說,一個真正的用戶通過“地址”查詢參數向我發送地址。

例子 -

https://mywebsite.com/details?instId=151711&address=24%20House%20Road%0aSomePlace%0aCountry

由於將從上面的字符串中刪除“%0A”,地址現在將變為“24HouseRoadSomePlaceCountry”,這出乎我的意料。

我該如何處理? 如果我對 CRLF 進行代碼更改,這將改變輸入的解釋方式。 如果輸入字符串未經過清理,那么它將打開我的服務器以進行 CRLF 攻擊。

這里有什么建議嗎?

如果你真的需要用戶提供帶有 CRLF 序列的數據,那么我不會過濾那些。 一如既往,永遠不要以任何方式信任用戶提供的數據:不要使用它來生成 HTTP 標頭、響應或寫入日志文件。

通常,以相反的方式過濾更安全:指定您願意接受的所有字符,並過濾掉其他所有字符。

如果您需要將數據寫入日志,例如 URL,您可以先對數據進行編碼,這樣“裸”CR LF 就永遠不會寫在那里。

我可能會在內部指定我只使用 \n 作為換行符,並在內部將所有 \r、\n 和 \r\n 轉換為一種表示形式 \n。 所以代碼的 rest 不必處理所有版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM