ASP.NET Core MVC CSRF対策を調べてみた
Webシステムの脆弱性に CSRF (Cross-Site Request Forgery)
いわゆる、クロスサイトリクエストフォージェリがあります。
その対策として
フォーム側にトークンを埋め込んで、受ける側でトークンを検証することで
自サーバーからのPOSTであることが保証されます。
ASP.NET Core MVCではどのようにするのか調べてみました。
Visual Studio Community 2017 for Mac で動作確認しています。
View側の記述
タグヘルパーでFormを記述します。<form asp-action="Index" method="post">
すると、Formの中にトークン情報が仕込まれます。
hidden属性で __RequestVerificationToken のvalueに
トークン情報がセットされます。
Controller側の記述
POSTを受けるController側にも記述します。 [HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Index(ItemGrpViewModel model)
[ValidateAntiForgeryToken]を記述するだけです。
実際に効いているか確認してみます。
Chromeのデベロッパーツールで__RequestVerificationToken のvalueの中身を変更して
Submitしてみます。
きちんとエラーではじかれました。
最後にもっと便利な方法がありました
[ValidateAntiForgeryToken]をいちいち全てのPOSTアクションへ記述するのは面倒だし忘れてしまうかもしれません。
それを一括で可能にする方法がありました!
[AutoValidateAntiforgeryToken] public class HomeController : Controller {
Controllerのクラス定義の上に [AutoValidateAntiforgeryToken]を記述することで
全てのPOSTアクションに適用することができます。
もちろんGETアクションにはそのまま利用できます。
このへんはさすがによくできていて、簡単に実装することができます。
もう一から自力で、フルスクラッチで開発しようなどと
とても思わないですね。