web-dev-qa-db-ja.com

RequestValidationModeを2.0に設定せずにリクエスト検証を無効にするにはどうすればよいですか?

ASP.NET 4.0にアップグレードしたところ、requestValidationが機能しなくなったことがわかりました。 MSDNのドキュメントでは、web.configの requestValidationMode を2.0に設定する必要があることが示されています。

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

これは私たちにとってはうまくいくでしょうが、私は少し戸惑っています。これをレガシー/互換モードに移行しているようです。確かに4.0の動作をすることは可能であるはずですが、それでもページでこれをオフにするオプションがありますか?

15
Danny Tuppeny

サイト全体でRequestValidationModeを2.0に変更せずにこれを実現する方法を見つけました。

リクエストの検証を無効にするページのサブディレクトリを作成し、RequestValidationModeを2.0に設定してこのディレクトリに新しいweb.configを追加できます。これにより、このディレクトリのみが2.0モードで機能し、他のすべてのリクエストに影響を与えることはありません。 4.0モードで動作します。

メインのweb.configに1ページのみを指定して場所セクションを追加できると思いますが、これはまだテストしていません。このようなもの:

<location path="Admin/Translation.aspx">
    <system.web>
        <httpRuntime requestValidationMode="2.0"/>
    </system.web>
</location>

それが私を助けたようにあなたを助けることを願っています!

26
Jeison Souza

最善の策は、requestValidationTypeを独自のコードでオーバーライドすることです。

<httpRuntime requestValidationType="YourNamespace.YourValidator" />

[〜#〜] msdn [〜#〜] リンク

4
Scott R. Frost

RequestValidationMode4.0のページでこれをオンまたはオフにすることはできないようです。

この ホワイトペーパー は、.Net 4.0での重大な変更の概要を示しており、そのうちの1つと思われます。ホワイトペーパーでさえ、requestValidationMode2.0に戻すことを提案しています

ASP.NET 2.0要求検証機能の動作に戻すには、Web.configファイルに次の設定を追加します。

<httpRuntime requestValidationMode="2.0" />

また、お勧めしますが

リクエスト検証エラーを分析して、既存のハンドラー、モジュール、またはその他のカスタムコードが、XSS攻撃ベクトルである可能性のある安全でない可能性のあるHTTP入力にアクセスするかどうかを判断します。

これらの問題を解決するための最善の方法についてのガイダンスを提供せずに

3
James Toyer