4

asp.net webforms アプリケーションでの ajax リクエストに対する csrf 攻撃を防ぐにはどうすればよいですか

4

2 に答える 2

8

トークンを作成して Session["CSRF"] に保持し、すべてのページの HiddenField で同じものをレンダリングできます。

protected HiddenField CSRF { get; set; }

protected void page_load(object s, args[] e) {
    if(Session["CSRF"]!=null) {
        this.CSRF=Session["CSRF"];
    }
    else {
        Session["CSRF"]=Guid.NewGuid().ToString();
        this.CSRF=Session["CSRF"];
    }
}

したがって、リクエストを送信するたびに、それをデータパラメーターとして追加し、サーバー側のコードで確認してください。

すべてのリクエストに対して、この CSRF HiddenField id を渡します。

ViewState["CSRF"]デフォルトでは、更新パネルはページのビューステートも送信するため、ASP.Net Ajax 呼び出しの場合は を使用できます:)

jQuery ajaxの場合

var csrf_token = '<%= csrf_value %>';

以下のコードは、すべての ajax リクエストに対してこのトークンを追加します

$("body").bind("ajaxSend", function(elm, xhr, s){
if (s.type == "POST") {
xhr.setRequestHeader('X-CSRF-Token', csrf_token);
}
});
于 2013-09-30T16:14:07.140 に答える
1

次のリンクを参照してください:クロスサイト リクエスト フォージェリ (CSRF) 攻撃の防止

つまり、ASP.NET MVC フレームワークの一部として提供される偽造防止トークンです。ただし、Web フォームを使用しているため、もう少し複雑になる可能性がありますが、ASP.NET Web サイトで Web フォームと MVC の両方を実行することは可能です (または、この回答済みの質問: Asp.net Forms での AntiForgery の実装 を参照してください)。

編集:また、jQuery呼び出しを保護するために、偽造防止トークンを使用してクライアント側で印刷することもできます(ここで説明されているように:

var csrf_token = '<%= token_value %>';
$("body").bind("ajaxSend", function(elm, xhr, s){
   if (s.type == "POST") {
      xhr.setRequestHeader('X-CSRF-Token', csrf_token);
   }
});
于 2013-09-30T16:04:46.357 に答える