ASP.NET MVC ValidateInput(false)は、xValおよび[RegularExpression] DataAnnotationの使用を停止します

StackOverflow https://stackoverflow.com/questions/1038102

質問

<!> quot; <!> lt; <!> quot;をインターセプトしたい正規表現バリデーターによるフォームフィールド内の文字。問題を3つのステップで説明します。

ステップ1 :<!> quot; <!> lt; <!> quot;を含むフィールドを持つフォームを送信しようとすると、文字、<!> quot;潜在的に危険な要求... <!> quot; -ASP.NETで予想されるとおり。

ステップ2 :ASP.NETのRequestValidationを回避するために、コントローラーのUpdateメソッドを<!> quot; [ValidateInput(false)] <!> quot;で装飾します。

期待どおりに動作します-<!> quot; <!> lt; <!> quot;エラーなしの文字。

ステップ3 :DataAnnotationsでxValを使用します。たとえば、[Required]または[StringLength(255)]は期待どおりに機能します。

ただし、使用する場合: [RegularExpression (<!> quot; ^ [^ <!> lt; <!> gt;] * $ <!> quot ;, ErrorMessage = <!> quot;特殊文字は使用できません。<!> quot;)]、 <!> quot;潜在的に危険なリクエストを受け取ります... <!> quot; [ValidateInput(false)]ディレクティブにもかかわらず、再度エラー

何が起きているの?正規表現の検証のためのより簡単な方法はありますが、[ValidateInput(false)]が設定されていますか?もちろん、コントローラーではなくモデルに検証コードを入れたいです。

役に立ちましたか?

解決

  

いいえ、それはMVC 1 + xValの問題でした。   MVC 2では、検証は次のように機能します   想定(そしてxValの必要はありません   もう)<!>#8211; Alex42

ボットは、これをまだトップにプッシュし続けているように見えます。回答を承認済みとしてマークして、わかるようにしますか?

他のヒント

xVal <!> amp;を使用しています。 nhibernate.validatorと私はこの動作を再現しようとしましたが、バリデーターがクライアント側に結び付けられているため、クライアント側の検証を過ぎた値を取得できませんでした。 javascriptを無効にすると、サーバー側の検証に到達し、正規表現検証でキャッチされました。

データアノテーション検証属性とモデルバインダーを使用して同じことを試みましたが、同様に過去のものになりました。

エラーを引き起こしている他の処理が行われている必要があります。申し訳ありませんが、私はこれ以上役立つことができませんでした!

このメソッド。これにより、少なくとも式からxValを削除できます。問題が解決しない場合は、次のいずれかに関連することをお勧めします。

  • MVCのデフォルトのモデルバインダーの実装
  • または使用しているリリースのMVCビューエンジンに問題があるため、&lt; を検証することで指定した属性に対して例外が発生する可能性があります

フィールドだけの場合は、文字 '&lt;を探すルーチンを作成するだけですまたは&gt; '削除します。これは、部分文字列を使用することで実現できます。これがお役に立てば幸いです

  • forテスト対象のテキストの長さのループ(for(int i = 1、i&lt; = text.length、++))
  • 1で始まる各文字を確認します(例:ch = text.substring(i、1)
  • '&lt;を除く各読み取り文字をtmp文字列に追加します。または&gt; '

静的メソッド Escape()がこれを解決すると思います。

  Regex r = new Regex(Regex.Escape(expression));

web.configにこの行を追加

<httpRuntime requestValidationMode="2.0" />

これはASPNET 4.0の変更です

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top