ASP.NET MVCは、ユーザーが明示したトークンを使ってCSRF攻撃の検出とブロックを可能にする has AntiForgeryTokenヘルパーを持っている。しかし、主にajaxリクエストやKnockoutとBackboneのようなJSONペイロードのJavaScriptフレームワークを使っている場合、アプローチを少し変更する必要がある。
AntiForgeryTokenヘルパーは、Formのhiddenフィールドにトークンを含めたFormのPOSTで動作する。ValidateAntiForgeryTokenは、サブミットされたFormの値の確認だけを行う。これをJSONリクエストで動作するようにするには、以下のアプローチのいずれかを使用することができる。 -
- 簡単にJQueryによるajax POSTをするには、すべてのページにトークンを持ったフィールドを含めた別フォームを作成して、明示的にpostリクエストに使用する。
- Sergey Barskiy氏は、通常のペイロードとは異なるJSONペイロードを解析ために独自の属性を作成する方法を提示している。
- Justin Etheredge氏は、メタヘッドタグとカスタム属性を追加して、独自のヘルパーメソッドを使う方法を提示している。
これらすべてのソリューションは、__RequestVerificationTokenフィールドディレクトリに設定されている値に依存している。このフィールド名は、MVCフレームワークで固定的に使われている。
CSRF攻撃を回避するASP.NET MVCトークンヘルパについてより深く知りたい場合、Steven Sandersons氏の記事でこれについて紹介されている。