![](/img/trans.png)
[英]Receiving “potentially dangerous Request.Form” with requestValidationMode = 2.0
[英]How do I disable request validation without setting RequestValidationMode to 2.0?
我們剛剛升級到ASP.NET 4.0,發現requestValidation不再起作用了。 MSDN 文檔建議我們需要將 web.config 中的requestValidationMode設置為 2.0:
- 4.0(默認)。 HttpRequest object 在內部設置了一個標志,指示無論何時訪問任何 HTTP 請求數據都應觸發請求驗證。 這保證了在請求期間訪問 cookies 和 URL 等數據之前觸發請求驗證。 配置文件中的頁面元素(如果有)或單個頁面中的@Page 指令的請求驗證設置將被忽略。
- 2.0。 僅對頁面啟用請求驗證,而不是對所有 HTTP 請求啟用。 此外,配置文件中頁面元素(如果有)或單個頁面中的@Page 指令的請求驗證設置用於確定要驗證哪些頁面請求。
這對我們有用,但我有點困惑。 看來我們正在將其置於遺留/兼容模式中。 當然應該可以有 4.0 的行為,但仍然可以選擇在頁面上關閉它?
我找到了一種方法來實現這一點,而無需將RequestValidationMode更改為2.0到整個站點:
您可以為要禁用請求驗證的頁面創建子目錄,並將新的web.config添加到此目錄,並將RequestValidationMode設置為2.0,這樣只有此目錄才能在2.0模式下工作,而不會影響所有其他請求在4.0模式下工作。
我想你可以在主web.config中添加一個位置部分,只指定一個頁面,但我還沒有測試過。 像這樣的東西:
<location path="Admin/Translation.aspx">
<system.web>
<httpRuntime requestValidationMode="2.0"/>
</system.web>
</location>
希望它可以幫助你幫助我!
您最好的選擇是使用您自己的代碼覆蓋requestValidationType:
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
MSDN鏈接
似乎無法在requestValidationMode 4.0中為頁面打開或關閉此功能。
本白皮書概述了.Net 4.0中的重大變化,其中似乎是一個。 即使是白皮書建議還原為requestValidationMode 2.0
若要還原到ASP.NET 2.0請求驗證功能的行為,請在Web.config文件中添加以下設置:
<httpRuntime requestValidationMode="2.0" />
雖然它也有助於推薦
您分析任何請求驗證錯誤,以確定現有處理程序,模塊或其他自定義代碼是否訪問可能是XSS攻擊媒介的可能不安全的HTTP輸入。
沒有就如何最好地解決這些問題提供任何指導
設置 requestValidationMode="0.0" 以禁用 ASP.NET 頁面和 HTTP 請求驗證。 值 0.0 在 ASP.NET 4.6 及更高版本中得到認可。 MSDN
<configuration>
<system.web>
<httpRuntime requestValidationMode="0.0" />
您可以在page指令中將ValidateRequest
設置為false:
<%@ Page ValidateRequest="false" %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.