こんにちは。セキュリティの世界へようこそ。
現場でバリバリとコードを書いていると、「動けば正義」になりがちですが、ふと立ち止まって「自分の作ったサイトが、知らない誰かに悪用されていないか?」と不安になることはありませんか?
今日は、そんなあなたの不安を一つ解消する、「iframe(アイフレーム)埋め込み攻撃」の防ぎ方についてお話しします。難しそうな用語が出てきますが、大丈夫。身近な「家の防犯」に例えて、一緒に紐解いていきましょう。
—
1. なぜ「iframe」が狙われるのか?(泥棒のメカニズム)
まず、iframeという技術を「家の窓」だと想像してみてください。自分の家(Webサイト)の中に、他の家(外部サイト)の窓をはめ込んで表示させる仕組みです。
これが便利な一方で、悪意のある攻撃者は「クリックジャッキング」という泥棒テクニックを使ってきます。
攻撃の仕組み:透明なフィルムの罠
攻撃者は、あなたのサイトを自分のサイトの中に「透明な枠(iframe)」としてこっそり埋め込みます。そして、あなたのサイトの上に、さらに透明なボタンを重ねます。
ユーザーが「わあ、面白そうなサイトだ!」と思ってクリックすると、実は裏側に隠れた「あなたのサイトの重要なボタン(例:退会ボタンや送金ボタン)」を押させられている……。これがクリックジャッキングの恐ろしさです。
「えっ、そんなことできるの?」と思うかもしれませんが、ブラウザは「表示していいよ」と許可されている限り、どこから埋め込まれても忠実に表示してしまうんです。
—
2. 昔の防犯:「X-Frame-Options」という古い鍵
かつては「X-Frame-Options」というヘッダーを使って、「自分のサイトをiframeで表示させるか、させないか」を決めていました。
DENY: 全員、埋め込み禁止!(頑丈な鉄格子)SAMEORIGIN: 同じサイト内なら埋め込みOK!(身内には鍵を渡す)
シンプルで良いのですが、「提携先の特定のサイトだけに埋め込みを許可したい」といった、現代の柔軟な開発ニーズには対応しきれませんでした。「鍵を渡したい相手をピンポイントで選べない」のが最大の弱点だったんですね。
—
3. 今の防犯:CSP「frame-ancestors」で賢くガード
そこで登場したのが、CSP(Content Security Policy)の frame-ancestors という仕組みです。
これは「どのドメインからの埋め込みを許可するか」をリスト化できる、いわば「入館証リスト」のようなものです。これを使うと、特定の信頼できるパートナーサイトにだけ「あなたの家」を公開することができます。
設定の書き方(実用例)
Webサーバーの設定ファイル(ApacheやNginx)や、アプリケーションのレスポンスヘッダーに以下のように記述します。
CSPの設定例
‘self’ = 自分自身(同じサイト内)はOK
https://trusted-partner.com = このサイトからの埋め込みだけは特別に許可する
Content-Security-Policy: frame-ancestors ‘self’ https://trusted-partner.com;
もし、誰からも埋め込まれたくない場合は、もっとシンプルです。
誰にもiframeで埋め込ませない(最強の防犯)
Content-Security-Policy: frame-ancestors ‘none’;
—
4. 現場で役立つアドバイス
新人のエンジニアさんからよく質問されるのが、「CSPとX-Frame-Options、どっちを書けばいいの?」という点です。
結論から言うと、「両方書くのが、今の現場のリアルな正解」です。
最新のブラウザは賢いのでframe-ancestorsを優先してくれますが、古いブラウザや特定の環境ではまだX-Frame-Optionsしか解釈できない場合があります。念には念を入れて、二重に鍵をかけておきましょう。
現場の鉄板設定
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors ‘self’ https://trusted-partner.com;
—
おわりに:セキュリティは「想像力」
セキュリティ対策は、単なるプログラミングの作業ではありません。「もし自分が悪いことを考えたら、どこを突くかな?」と想像するゲームのようなものです。
今日紹介した frame-ancestors は、一度設定してしまえば自動であなたのサイトを守り続けてくれる、非常にコストパフォーマンスの良い防犯装置です。
「なんだか難しそう」と後回しにしていたあなたも、今日の帰り道、ふと「あ、うちのサイトの鍵、閉めておこう」と思い立ってくれると嬉しいです。小さな設定の積み重ねが、あなた自身とユーザーの大切な情報を守る一番の近道ですからね。
それでは、また次回のセキュリティ講座でお会いしましょう!
コメント