- CSRF対策は「正しいユーザーの操作だけを受け付けるための防御」です
- CSRFの仕組みをかみ砕いて理解する
- ステップ1:CSRFトークンの考え方を理解する
- ステップ2:ASP.NET Coreの標準CSRF対策(Anti-Forgery)を使う
- ステップ3:CSRFトークンの流れをステップバイステップで追う
- ステップ4:Ajax(JavaScript)でCSRFトークンを送る場合
- ステップ5:CSRF対策ユーティリティの設計(概念的)
- ステップ6:CSRF対策で絶対にやってはいけないこと
- ステップ7:SameSiteクッキーやRefererチェックなどの補助的対策(深掘り)
- ステップ8:実務的ベストプラクティス
- まとめ:CSRF対策ユーティリティと仕組みは「正しいユーザー操作だけを受け付けるための信頼のフィルタ」
CSRF対策は「正しいユーザーの操作だけを受け付けるための防御」です
業務システムやWebアプリケーションを開発する読者のみなさんにとって、 CSRF(Cross-Site Request Forgery:クロスサイトリクエストフォージェリ)は、 「ユーザーのブラウザを悪用して、意図しない操作をさせる」タイプの攻撃です。
ユーザーがログイン中の状態で、攻撃者が用意したページを開くと、 そのブラウザから「正規サイトへのリクエスト」が送られてしまい、 パスワード変更や送金処理などが勝手に実行される可能性があります。
ここでは、プログラミング初心者の方にも分かるように、 C#(主にASP.NET Core)で実務的に使える CSRF対策ユーティリティと仕組み を ステップバイステップで整理し、例題・コード・テンプレートを交えて詳しく説明していきます。
CSRFの仕組みをかみ砕いて理解する
どんなときにCSRFが起きるのか
CSRFは、次の条件がそろったときに発生します。
- ユーザーが正規サイトにログインしている(クッキーが有効)
- 正規サイトが「状態を変更する操作」をHTTPリクエストで受け付けている
- 攻撃者が用意したページから、その正規サイトへのリクエストが送られる
例えば、次のようなHTMLが攻撃者のサイトに置かれていたとします。
<form action="https://bank.example.com/transfer" method="POST">
<input type="hidden" name="to" value="attacker">
<input type="hidden" name="amount" value="100000">
</form>
<script>
document.forms[0].submit();
</script>
ユーザーがログイン中のブラウザでこのページを開くと、 ブラウザは自動的に bank.example.com のクッキーを付けてリクエストを送ってしまい、 送金処理が実行される可能性があります。
CSRF対策の基本的な考え方
CSRF対策の本質は、
- 「正規のフォームから送られたリクエストだけを受け付ける」
- 「攻撃者のページから送られたリクエストを見分けて拒否する」
という仕組みを作ることです。
そのために、代表的な方法として CSRFトークン を使います。
