web-dev-qa-db-ja.com

requestValidationMode 4.5 vs 2.0

RequestValidationMode = "4.5"とrequestValidationMode = "2.0"に違いはありますか? .NET 4.5アプリケーションがあります。ユーザーがhtmlタグを入力できるため、検証したくないコントロールがあります。

<asp:TextBox ID="txtTitle" runat="server" ValidateRequestMode="Disabled" />

私のweb.configには:

<compilation debug="true" strict="false" explicit="true" targetFramework="4.5">...</compilation> 
<httpRuntime targetFramework="4.5" requestValidationMode="2.0"  />

最初にrequestValidationMode = "4.5"を設定しましたが、機能しませんでしたが、タグに関するエラーが引き続き表示されます-"クライアントから潜在的に危険なRequest.Form値が検出されました..." 。ただし、requestValidationMode = "2.0"に設定すると機能します。Pag​​eLoadを押して、そのフィールドの値をエンコードできます。

19
Paritosh

はい、2つの間に違いがあります。 4.0以上として指定されたrequestValidationModeはすべて4.0の方法を使用し、4.0以下で指定されたrequestValidationModeは2.0の方法を使用します。以下に2つの説明を示します。

http://msdn.Microsoft.com/en-us/library/system.web.configuration.httpruntimesection.requestvalidationmode.aspx

4.0(デフォルト)。 HttpRequestオブジェクトは、HTTP要求データにアクセスするたびに要求検証をトリガーすることを示すフラグを内部的に設定します。これにより、リクエスト中にCookieやURLなどのデータにアクセスする前に、リクエストの検証がトリガーされることが保証されます。構成ファイルのpages要素(存在する場合)または個々のページの@ Pageディレクティブの要求検証設定は無視されます。

2.0。要求の検証は、すべてのHTTP要求に対してではなく、ページに対してのみ有効です。さらに、構成ファイルのpages要素(存在する場合)または個々のページの@ Pageディレクティブの要求検証設定を使用して、検証するページ要求を決定します。

注:他のソリューションもあります。asp.net4.5を使用しているため、コントロールレベルごとに検証することをお勧めします。この方法では、web.configのrequestValidationModeプロパティを4.5のままにして変更することができます。それを必要とするコントロールに。 http://msdn.Microsoft.com/en-us/library/system.web.ui.control.validaterequestmode.aspx

22
chris_dotnet

Chris_dotnetの答えに同意します。

ただし、小さなサイドノートを追加したいと思います。

Web.configファイルで、requestValidationMode="2.0"タグを ロケーション タグを使用すると、特定のページにのみこの「免除」を許可して検証をスキップできます。

<location path="YourPage.aspx">
  <system.web>
    <httpRuntime requestValidationMode="2.0"/>
  </system.web>
</location>
16
A. Varma