私は自分のアプリに、インターネット上のブログ投稿で読んだ情報に従って、CSRF攻撃の緩和策を実装しました。特にこれらの投稿は私の実装の原動力となっています
- ASP.NETおよびWebツール開発者コンテンツチームによるASP.NET MVCのベストプラクティス
- Phil Haackブログのクロスサイトリクエストフォージェリ攻撃の構造
- ASP.NET MVCフレームワークのAntiForgeryToken- David HaydenブログのHtml.AntiForgeryTokenおよびValidateAntiForgeryToken属性
基本的に、これらの記事と推奨事項では、CSRF攻撃を防ぐには、次のコードを実装する必要があるとしています。
1)[ValidateAntiForgeryToken]
POST Http動詞を受け入れるon onアクションを追加します
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SomeAction( SomeModel model ) {
}
2)<%= Html.AntiForgeryToken() %>
サーバーにデータを送信するフォーム内にヘルパーを追加します
<div style="text-align:right; padding: 8px;">
<%= Html.AntiForgeryToken() %>
<input type="submit" id="btnSave" value="Save" />
</div>
とにかく、私のアプリの一部で、フォームをまったく持たずにサーバーに対してjQueryでAjax POSTを実行しています。これは、たとえば、ユーザーに画像をクリックして特定のアクションを実行させる場合に発生します。
アクティビティのリストを含むテーブルがあるとします。テーブルの列に「アクティビティに完了のマークを付ける」という画像があり、ユーザーがそのアクティビティをクリックすると、次のサンプルのようにAjax POSTを実行しています。
$("a.markAsDone").click(function (event) {
event.preventDefault();
$.ajax({
type: "post",
dataType: "html",
url: $(this).attr("rel"),
data: {},
success: function (response) {
// ....
}
});
});
<%= Html.AntiForgeryToken() %>
これらの場合にどのように使用できますか?Ajax呼び出しのデータパラメーター内にヘルパー呼び出しを含める必要がありますか?
長い投稿でごめんね、助けてくれてありがとう
編集:
あたりとしてjayrdub答え私は、次のように使用していました
$("a.markAsDone").click(function (event) {
event.preventDefault();
$.ajax({
type: "post",
dataType: "html",
url: $(this).attr("rel"),
data: {
AddAntiForgeryToken({}),
id: parseInt($(this).attr("title"))
},
success: function (response) {
// ....
}
});
});