asp.net webforms アプリケーションでの ajax リクエストに対する csrf 攻撃を防ぐにはどうすればよいですか
2 に答える
トークンを作成して 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 呼び出しの場合は を使用できます:)
var csrf_token = '<%= csrf_value %>';
以下のコードは、すべての ajax リクエストに対してこのトークンを追加します
$("body").bind("ajaxSend", function(elm, xhr, s){
if (s.type == "POST") {
xhr.setRequestHeader('X-CSRF-Token', csrf_token);
}
});
次のリンクを参照してください:クロスサイト リクエスト フォージェリ (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);
}
});