16

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

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

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

4

4 に答える 4

26

サイト全体で 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>

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

于 2012-06-02T04:15:15.460 に答える
4

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

<httpRuntime requestValidationType="YourNamespace.YourValidator" />

MSDNリンク

于 2012-03-23T20:02:04.203 に答える
3

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

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

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

<httpRuntime requestValidationMode="2.0" />

それはまた役に立つことをお勧めしますが

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

これらの問題を解決する最善の方法についてのガイダンスを提供することなく

于 2011-11-11T23:32:44.410 に答える
-6

ValidateRequestpage ディレクティブで false に設定できます。

<%@ Page ValidateRequest="false" %>
于 2011-10-12T13:42:26.010 に答える