web-dev-qa-db-ja.com

requestValidationMode = "2.0"は実際に何をしますか?


「潜在的に危険なRequest.Form値がクライアントから検出されました」という問題を解決しようとしていますが、SO回答と Scott Hanselman 設定をお勧めします

<httpRuntime requestValidationMode="2.0" />

web.config内(問題のあるメソッドに属性を追加するとともに)。
これにより検証モードがASP.NET2.0に変更されることに気付きましたが、それはどういう意味ですか?
また、この変更には、注意すべき副作用がありますか?

ありがとう。

19
Oren A

MSDNのHttpRuntimeSection.RequestValidationModeプロパティ の説明を確認してください。

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

15

ASP.NETリクエストの検証 >をご覧ください

ASP.NETの要求検証機能は、クロスサイトスクリプティング(XSS)攻撃に対する一定レベルのデフォルトの保護を提供します。以前のバージョンのASP.NETでは、要求の検証はデフォルトで有効にされていました。ただし、ASP.NETページ(.aspxファイルとそのクラスファイル)にのみ適用され、それらのページが実行されている場合にのみ適用されました。

ASP.NET 4では、HTTP要求のBeginRequestフェーズの前に有効になっているため、デフォルトですべての要求に対して要求の検証が有効になっています。その結果、要求の検証は、.aspxページ要求だけでなく、すべてのASP.NETリソースの要求に適用されます。これには、Webサービス呼び出しやカスタムHTTPハンドラーなどの要求が含まれます。カスタムHTTPモジュールがHTTPリクエストの内容を読み取っている場合も、リクエストの検証がアクティブになります。

その結果、以前はエラーをトリガーしなかったリクエストに対して、リクエスト検証エラーが発生する可能性があります。 ASP.NET 2.0要求検証機能の動作に戻すには、Web.configファイルに次の設定を追加します。

<httpRuntime requestValidationMode="2.0" />

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

1
Hector Correa