簡體   English   中英

如何在不將 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.

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