5

JQueryの$.Ajax(..)を使用してマークアップを含むJSONオブジェクトをMVCアクションメソッドに投稿すると、ASP.Netの要求検証によってコンテンツが拒否されないことに驚きました。

リクエストの検証がJSON投稿に適用されない理由はありますか?

次の定義では、マークアップはサーバーによって拒否されません...

$.ajax({
        url: '/Controller/Action',
        data: JSON.stringify({data:data}),
        type: "POST",
        dataType: "json",
        contentType: "application/json",
      }); 

JSONタイプの投稿に関連付けられているようです

.Net 4.0MVC3.0を使用しています

コメントをデータベースに保存する機能を作成しています。マークアップ/スクリプトがリクエストの検証を通過する可能性があるというセキュリティの問題のようです...

さまざまなプロパティ(commentTextなど)を使用してJSONオブジェクトを投稿しています。何らかの理由で、<div></div>などのマークアップが含まれている場合、投稿が拒否されません。

動作を説明しているように見える記事をここで見つけました:

http://weblogs.asp.net/imranbaloch/archive/2011/05/23/security-issue-in-asp-net-mvc3-jsonvalueproviderfactory.aspx

4

4 に答える 4

3

ここに手がかりがあるようです http://weblogs.asp.net/imranbaloch/archive/2011/05/23/security-issue-in-asp-net-mvc3-jsonvalueproviderfactory.aspx

于 2013-01-07T13:26:30.410 に答える
1

リクエストの検証について話していると思いますか?これはMVCでオンになっているため、asp.netによってJSON文字列が脅威と見なされてはなりません-マークアップを含むjson文字列がデフォルトで拒否されるかどうかは思い出せませんが、そうではないと思います。

詳細については、こちらをご覧ください:http ://weblogs.asp.net/imranbaloch/archive/2011/02/19/understanding-request-validation-in-asp-net-mvc-3.aspx

于 2013-01-05T20:33:59.857 に答える
1

サーバーに渡すデータがどのように正確に見えるかはわかりませんが、今のところ、それは単なる文字列値'xyz'であると想定しています。この場合、サーバーは次のPOSTデータを取得します。

{"データ":"テスト"}

これは完全に問題なく、ASP.NETによって識別される潜在的なスレッドを表すものではありません。

PS:データとして他の値を使用している場合、ストーリー全体が異なる可能性があります...

于 2013-01-06T00:18:45.773 に答える
0

リクエストの検証は、データアノテーションを使用してモデルで機能します。モデルでのHTMLメイク入力を有効または無効にできます。[AllowHtml]を使用して、モデルでこれを行うことができます。その後、ユーザーが通常のフィールドにHTMLを入力すると、Model.IsValidプロパティを使用してエラーを確認できます。

于 2013-01-06T17:54:47.873 に答える