Asp.net
url 內的雙轉義序列:請求過濾模組被配置為拒絕包含雙轉義序列的請求
在我的 ASP.NET MVC 應用程序上,我正在嘗試實現如下所示的 URL:
/產品/標籤/for+family
當我嘗試使用預設配置執行我的應用程序時,我收到帶有 404.11 響應程式碼的這條消息:
HTTP 錯誤 404.11 - 未找到
請求過濾模組用於拒絕包含雙轉義序列的請求。
我可以通過在我的 web.config 中實現以下程式碼來解決這個錯誤:
<system.webServer> <security> <requestFiltering allowDoubleEscaping="true" /> </security> </system.webServer>所以,現在我沒有得到任何
404.11.我想知道的是,我用這個實現打開了什麼樣的安全漏洞。
順便說一句,我的應用程序
.Net Framework 4.0在IIS 7.5.
您可能打開的安全漏洞與程式碼注入有關——HTML 注入、JavaScript 注入或 SQL 注入。
預設設置通過不允許常見的注入策略起作用,以半有效的方式保護您免受攻擊。您刪除的預設安全性越多,您就越需要考慮如何處理通過 URL、GET 請求查詢字元串、POST 請求數據、HTTP 標頭等提供的輸入……
例如,如果您正在基於
idaction 方法的參數建構動態 SQL 查詢,如下所示:public ActionResult Tags(string id) { var sql = "SELECT * FROM Tags Where tagName = '" + id + "'"; // DO STUFF... }(…這不是一個好主意),由 .NET 框架實施的預設保護可能會阻止一些更危險的情況,例如使用者請求此 URL:
/product/tags/1%27;drop%20table%20Tags;%20--整個想法是將 url 的每個部分和操作方法的其他輸入視為可能的威脅。預設安全設置確實為您提供了一些保護。您更改的每個預設安全設置都會導致您需要手動處理的更多潛在問題。
我假設您不是以這種方式建構 SQL 查詢。但是,當您將使用者輸入儲存在數據庫中,然後再顯示它們時,就會出現更狡猾的東西。惡意使用者可能會在您的數據庫中儲存未經編碼的 JavaScript 或 HTML,這反過來又會威脅到您系統的其他使用者。