C# Tips | セキュリティ:CSRF対策

C# C#
スポンサーリンク
スポンサーリンク

CSRF対策は「正しいユーザーの操作だけを受け付けるための防御」です

業務システムやWebアプリケーションを開発する読者のみなさんにとって、 CSRF(Cross-Site Request Forgery:クロスサイトリクエストフォージェリ)は、 「ユーザーのブラウザを悪用して、意図しない操作をさせる」タイプの攻撃です。

ユーザーがログイン中の状態で、攻撃者が用意したページを開くと、 そのブラウザから「正規サイトへのリクエスト」が送られてしまい、 パスワード変更や送金処理などが勝手に実行される可能性があります。

ここでは、プログラミング初心者の方にも分かるように、 C#(主にASP.NET Core)で実務的に使える CSRF対策ユーティリティと仕組み を ステップバイステップで整理し、例題・コード・テンプレートを交えて詳しく説明していきます。

CSRFの仕組みをかみ砕いて理解する

どんなときにCSRFが起きるのか

CSRFは、次の条件がそろったときに発生します。

  1. ユーザーが正規サイトにログインしている(クッキーが有効)
  2. 正規サイトが「状態を変更する操作」をHTTPリクエストで受け付けている
  3. 攻撃者が用意したページから、その正規サイトへのリクエストが送られる

例えば、次のような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トークン を使います。

タイトルとURLをコピーしました