エンジニアの皆さん、こんにちは。現場で泥臭くコードを書き、時には深夜のインシデント対応で汗を流す「セキュリティの現場監督」です。
今日は、Webアプリ開発の登竜門であり、かつベテランでも油断すると足元をすくわれる「CSRF(クロスサイト・リクエスト・フォージェリ)」と、それを防ぐための最強タッグ「カスタムヘッダー×CORS」についてお話しします。
教科書には難しい言葉が並んでいますが、実はこれ、「家の防犯」に例えると驚くほどシンプルなんです。さあ、一歩ずつ紐解いていきましょう!
—
1. CSRFという名の「泥棒」の手口を知ろう
CSRFは、日本語で「クロスサイト・リクエスト・フォージェリ」と言います。簡単に言うと、「あなたになりすまして、勝手に悪さをする攻撃」のことです。
泥棒のメカニズム
あなたが銀行のサイトにログインして、「送金」ボタンを押すとしますよね。この時、ブラウザは「ログインした人だ!」という証明書(クッキー)を自動的に銀行へ送ります。
攻撃者は、あなたがログインしている状態で、悪意のあるサイト(罠サイト)をあなたに開かせます。すると、罠サイトがこっそりあなたのブラウザを操り、裏側で「送金ボタン」を勝手に押させるのです。ブラウザは「いつもの証明書」を付けて送るため、銀行側は「本人が頼んだことだ」と勘違いして送金を実行してしまいます。
これがCSRFの恐ろしさです。「本人のブラウザが勝手にやる」ので、サーバー側からは見抜きにくいんですね。
—
2. 最初の防波堤:カスタムHTTPヘッダーという「合言葉」
CSRFを防ぐ古典的な手法は「トークン」を使うことですが、最近のモダンなSPA(ReactやVueなど)開発では、カスタムHTTPヘッダーを検証するのが主流です。
これは、家に入る時に「玄関の鍵とは別に、合言葉を言わなきゃいけないルール」を作るようなものです。
ブラウザの標準的な機能(HTMLの
コメント