3

私はこのエラーを処理する方法を理解しようとしています。

潜在的に危険なRequest.Form値がクライアントから検出されました

このエラーは、ユーザーがhtmlまたはxmlタグ(<p>または<HeyImXML>)を入力してフォームを送信しようとすると発生します。入力には、プレーンテキストだけで、いかなる種類のマークアップも含まれないはずです。

ASP.NETMVC2.0でモデルバインディング検証をと一緒に使用していHtml.EnableClientValidationます。マークアップが入力されていない限り、これは正常に機能します。

このエラーメッセージを回避するための最良のアプローチは何ですか?

私の推測では、この種のマークアップをチェックする新しい検証クラスを作成することですか?

この特定のインスタンスでエラーをキャッチしたいと思います。明確にするために、マークアップを入力できるサイト管理者用のフォームのある領域と、マークアップを入力できない通常のユーザー領域があります。ただし、このエラーページは、通常のユーザーがマークアップを入力したときに表示されます。私の質問は、サイトがクラッシュしてエラーページが表示されるのを防ぐために、これをどのように処理するかです。よりクリーンなエラーを表示したい。

4

2 に答える 2

1

MVC は、 HTML インジェクションクロスサイト スクリプティング (XSS)攻撃からアプリケーションを自動的に保護します。これが、html/javascript を投稿しようとすると、デフォルトで「潜在的に危険な Request.Form 値がクライアントから検出されました (...)」というメッセージが表示される理由です。

ただし、ユーザーが html を投稿できるようにしたい場合もあります。ユーザーが「›」などの文字を使用できるようにしたい場合や、ブログ機能を実装して ‹h1› や ‹div› などのタグをサポートしたい場合があります。これは、MVC を無効にすることで簡単に実現できます。検証を要求します。

[ValidateInput(false)]呼び出しているコントローラーのアクション メソッドに属性を追加します。これにより、特定のアクションでモデル全体のリクエストの検証が無効になります。

もう 1 つの方法は[AllowHtml]、モデルで html を必要とするプロパティに属性を追加することです。

これらの 2 つの属性は、html/javascript がアプリケーションに GET IN することのみを許可しますが、MVC は html エンコーディングを使用してそれらを安全に出力します。html のように出力したい場合は、@Html.Raw(@Model.Content) を使用できます。ただし、アプリケーションがクロスサイト スクリプティング攻撃 (XSS) にさらされる可能性があるため、注意して使用してください。

私は誰かのブログからこの解決策を見つけました

ソリューションについては、以下のコードも参照してください

次の方法でアプリケーション内のエラーを処理できます

1. アプリケーションの Web.Config ファイルで CustomErros モード セクションを設定する

これは、mode 属性が受け入れることができるオプションのリストです。

RemoteOnly:リモート ユーザーに対して一般的なエラー ページが表示されます。ローカル要求 (現在のコンピューターから行われた要求) については、豊富なエラー ページが表示されます。これがデフォルト設定です。

オフ:リクエストのソースに関係なく、すべてのユーザーに対して豊富なエラー ページが表示されます。この設定は、多くの開発シナリオで役立ちますが、デプロイされたアプリケーションでは使用しないでください。

オン:要求のソースに関係なく、すべてのユーザーに対して一般的なエラー ページが表示されます。これは最も安全なオプションです。

 <System.Web>
  //map all the erros presented in the application to the error.aspx webpage
 <customErrors mode="RemoteOnly" defaultRedirect ="~/error.aspx" />
<System.Web>

2. Application_Error 関数で Global.asax ファイルを介して

 //handle all the errors presented in the application
  void Application_Error(object sender, EventArgs e){  
 Server.Tranfer("error.aspx");
}

これがうまくいくことを願っています。

stackoverflow ソリューションから

于 2012-12-11T06:46:34.677 に答える
0

これは、スクリプト インジェクション攻撃を防止するため、ASP.Net の早い段階で導入されました。これは MVC に固有のものではありません。

この機能が必要ない場合は、オフにして独自の機能を作成できます。

ページでリクエストの検証を無効にするには、Page ディレクティブの validateRequest 属性を false に設定します。

<%@ Page validateRequest="false" %>

アプリケーションのリクエスト検証を無効にするには、Web.config を変更します -<pages />セクションの validateRequest 属性を falseに設定します。

<configuration> 
    <system.web> 
        <pages validateRequest="false" /> 
    </system.web> 
</configuration> 
于 2010-09-20T20:12:51.710 に答える