こんにちは。現場の最前線でコードとログに向き合い続けているセキュリティエンジニアです。
今日は「カスタムHTTPヘッダーを使ったCSRF(クロスサイト・リクエスト・フォージェリ)対策」という、一見スマートに見えるけど実はちょっとした「落とし穴」があるテーマについて、一緒に紐解いていきましょう。
セキュリティの世界は、時に家の防犯とそっくりです。まずはその感覚から掴んでいきましょうか。
—
1. CSRFってなに?:家の鍵と「なりすまし」の話
CSRFとは、簡単に言うと「あなたが普段使っているブラウザを悪用して、勝手に操作を代行させる攻撃」のことです。
想像してみてください。あなたは自分の家の玄関(Webアプリのログイン状態)を開けっ放しにして、ちょっとコンビニへ行きました。その隙に、泥棒があなたの家の裏口から勝手に入り込み、あなたの名前で「この家を売ります」という書類に勝手にハンコを押させる……。これがCSRFの恐ろしいところです。
攻撃者は、あなたがログインしていることを悪用して、「あなたのブラウザ」から「サーバーへ」勝手に命令を送らせるわけです。
—
2. カスタムヘッダー(X-Requested-With)による防御の仕組み
この攻撃を防ぐために、昔からよく使われているのが「カスタムHTTPヘッダー」をチェックする方法です。
例えば、Ajax(JavaScriptを使った非同期通信)でリクエストを送る際に、X-Requested-With: XMLHttpRequest という、「これはJavaScriptから送られたリクエストですよ」という名札(ヘッダー)を付ける手法です。
サーバー側は、「このリクエストに名札が付いていないなら、怪しいから拒否しよう!」と判断します。
なぜこれが有効なのか?
実は、ブラウザには「HTMLの標準機能(
コメント