3

フォーラムページを実行しようとすると:

System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client 

私のweb.configには次のものがあります:

<pages validateRequest="false" smartNavigation="false">

そして、実際のページには次のものもあります。

<%@ Page Language="C#" AutoEventWireup="true" ValidateRequest="false" MasterPageFile="~/MasterPages/Main.master" %>

しかし、それはこのエラーをスローし続けます!

編集

私はそれを修正しました:

<httpRuntime requestValidationMode="2.0" />

しかし、それは何をし、なぜ機能するのでしょうか?

4

2 に答える 2

5

送信されたテキストにマークアップがあった可能性があります。http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes

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" />
于 2011-03-13T16:47:03.723 に答える
5

このエラーは、送信されたフォームまたはクエリ文字列に、ASP.NET での検証にとって危険なものが含まれているために発生します。

追加することで

<httpRuntime requestValidationMode="2.0" />

ASP.NET 2 の標準に適用される検証を緩和しています。

検証を緩和するだけでなく、フォーム/クエリ文字列でオブジェクトが何を対象としているのかを正確に理解しようとする方がはるかに優れていると思います。この厳格な検証は、あなたとあなたのユーザーを保護するためのものであり、安易に緩めるべきではありません。

私は最近、ASP.NET MVC3 (バージョン 2 から) にアップグレードしたときに取り組んでいるプロジェクトでこれに遭遇しました。私たちの場合、意図しないときにクエリ文字列を urlencoding していたという問題が実際に強調されていました (つまり、疑問符とアンパサンドを含むクエリ文字列全体が、本来あるべきではないときにすべて url エンコードされていました)。

理由が何であれ、可能であれば検証を緩和するのではなく、根本的な原因を探してください。

于 2011-03-13T16:54:52.233 に答える