13

ビューにモデルとフォームがあります。説明と呼ばれる文字列の単純なフィールドがあります。<script>alert('xss')</script>次のようなスクリプトをそのフィールドに挿入できます。他のモデルを使用したサイトでの他のアクションでは、またはそのようなものを持っていないことがわかりますAllowHtml

唯一の違いは、このモデルでは、json オブジェクトとコンテンツ タイプの application/json を含む投稿を使用し、ModelState.IsValidtrue を返すことです。xssスクリプトを含む説明プロパティがありますが...

他のアクションについては、単純な ajax 投稿を作成します。

この種の JSON ajax 投稿で検証入力が機能しないのはなぜですか? この種の ajax リクエストに対してサイト全体で xss を防ぐにはどうすればよいですか?

ありがとう

4

3 に答える 3

0

ValidateInput は FormValueProvider 専用だからです。JsonValueProvider に関しては、独自のメカニズムを展開する必要があります。

手順 1) マーカー属性を作成するCustomAntiXssAttribute 2) サブクラス化してカスタム モデル バインダーを作成するDefaultModelBinder 3) メソッドをオーバーライドBindPropertyする -> 基礎となるプロパティの試行値を取得し、サニタイズしてビュー モデル プロパティに割り当てます。これをチェックしてください。

編集:ネストされた ViewModel をサポートするために、行var valueResult = bindingContext.ValueProvider.GetValue(propertyDescriptor.Name);を次のように置き換えます。var valueResult = bindingContext.ValueProvider.GetValue((string.IsNullOrWhiteSpace(bindingContext.ModelName) ? string.Empty : bindingContext.ModelName + ".") + propertyDescriptor.Name);

于 2014-03-14T18:06:03.097 に答える