ASP.NETで学ぶCSRF攻撃の仕組みと防御方法!初心者でもわかるセキュリティ対策入門
生徒
「ASP.NETのセキュリティ対策で、CSRFってよく聞くんですが、何をされる攻撃なんですか?」
先生
「CSRFは、知らないうちに操作をさせられてしまう攻撃です。ASP.NETでは標準で防ぐ仕組みがありますよ。」
生徒
「知らないうちに操作されるって怖いですね…。どうやって防ぐんですか?」
先生
「では、CSRF攻撃の仕組みとASP.NETでの防御方法を、順番に見ていきましょう。」
1. CSRF攻撃とは何か?
CSRFとは「クロスサイトリクエストフォージェリ」の略で、利用者が気づかないうちに不正な操作を実行させる攻撃です。たとえば、ログイン中の状態を悪用して、勝手に登録情報を変更されたり、送金処理を実行されたりします。
難しく聞こえますが、「本人のふりをして操作される」と考えるとイメージしやすいです。ASP.NETのセキュリティ対策では、特に重要な攻撃の一つです。
2. CSRF攻撃の具体的な仕組み
CSRF攻撃は、ログイン済みの利用者をだまして、攻撃者が用意したページを開かせることで発生します。ブラウザは自動的にCookieを送信するため、サーバー側は「正しい利用者の操作」と勘違いしてしまいます。
これは、家の鍵を開けたままにしていると、知らない人が勝手に入ってくる状況に似ています。
3. ASP.NETでCSRFが起きやすい場面
ASP.NET MVCやASP.NET Coreでは、フォーム送信やデータ更新処理がCSRFの標的になりやすいです。特に、POSTメソッドでの更新処理は注意が必要です。
ログイン状態を維持する仕組み(Cookie認証)を使っている場合、対策をしないとCSRF攻撃が成立してしまいます。
4. CSRF対策の基本「トークン」とは?
CSRF対策で使われるのがCSRFトークンです。これは「この画面から送信された正しい操作ですよ」という合言葉のようなものです。
ASP.NETでは、フォームごとにランダムなトークンを発行し、送信時に一致するかを確認します。一致しなければ、不正な操作として拒否されます。
5. ASP.NET MVCでのCSRF防御方法
ASP.NET MVCでは、ValidateAntiForgeryToken属性を使うことで、簡単にCSRF対策ができます。
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult UpdateProfile(string name)
{
// プロフィール更新処理
return View();
}
この属性を付けることで、正しいトークンがないリクエストは自動的に拒否されます。
6. フォーム側でのトークン埋め込み
サーバー側だけでなく、画面側にもトークンを埋め込む必要があります。Razorビューでは、専用のヘルパーを使います。
<form method="post">
@Html.AntiForgeryToken()
<input type="text" name="name">
<button type="submit">更新</button>
</form>
これにより、フォーム送信時にトークンが一緒に送られます。
7. ASP.NET CoreでのCSRF対策
ASP.NET Coreでも考え方は同じです。Razor PagesやMVCでは、標準でCSRF対策が組み込まれています。
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create()
{
return RedirectToAction("Index");
}
ASP.NET Coreでは、設定を変えなくても安全な状態から始められる点が特徴です。
8. CSRF対策をしないとどうなるか
CSRF対策を行わないと、利用者が意図しない操作を実行させられ、信頼を失う原因になります。個人情報の変更や削除が勝手に行われると、大きな問題に発展します。
ASP.NETのセキュリティ対策は、最初から正しく使うことが重要です。