JavaScript Tips | セキュリティ:iframeのOriginを検証する

JavaScript JavaScript
スポンサーリンク
スポンサーリンク
  1. iframeのOrigin検証は「画面の一部を“信頼できる外部コンテンツだけ”に限定するための防御技術です」
  2. iframeとOriginの関係をイメージする(まずは基本から)
    1. iframeの基本的な使い方
  3. なぜiframeのOrigin検証が必要なのか(危険なパターンを知る)
    1. 危険な例:srcを外部から自由に変更できる設計
  4. ステップ1:許可するOriginをホワイトリストで決める(最重要)
  5. ステップ2:URLからOriginを取り出して検証するユーティリティを作る
    1. 使用例
  6. ステップ3:iframeのsrcを設定する関数にOrigin検証を組み込む
    1. 安全な setIframeSrc 関数
    2. 使用例
  7. ステップ4:既に設定されているiframeのOriginを検証する
    1. 使用例
  8. ステップ5:業務で使える「iframe Origin検証ユーティリティ」(まとめ版)
  9. ステップ6:実務でのテンプレート例
    1. 管理画面で外部ダッシュボードを埋め込む
    2. 設定ファイルからiframeのURLを読み込む場合
  10. ステップ7:iframeとpostMessageを組み合わせる場合の注意点
  11. 深掘り:なぜ「iframeのOrigin検証」がここまで重要なのか
    1. 1. iframeは「外部コンテンツを自分の画面の一部として見せる」強力な機能
    2. 2. フィッシングや偽フォームの温床になりうる
    3. 3. セキュリティポリシーをコードで明文化できる
    4. 4. 外部サービス連携で必須の技術
  12. まとめ:iframeのOrigin検証は「画面の一部を守るためのセキュリティゲート」

iframeのOrigin検証は「画面の一部を“信頼できる外部コンテンツだけ”に限定するための防御技術です」

業務システムでは、<iframe> を使って外部コンテンツを埋め込む場面がよくあります。

  • 外部サービスのダッシュボードを管理画面に埋め込む
  • 決済サービスの入力画面を iframe で表示する
  • マニュアルサイトやヘルプページを一部だけ埋め込む

とても便利な一方で、iframeは 「別オリジンのコンテンツを自分のページの中に表示する」 仕組みです。 もし、意図しない・信頼できないオリジンのコンテンツを埋め込んでしまうと、

  • フィッシング的な画面をユーザーに見せてしまう
  • 攻撃者が用意した偽フォームを表示してしまう
  • ブランドやシステムの信頼性を損なう

といったリスクが生まれます。

そこで重要になるのが 「iframeのOriginを検証する」JavaScriptユーティリティと設計です。 ここでは、初心者向けにステップバイステップで解説していきます。

iframeとOriginの関係をイメージする(まずは基本から)

iframeの基本的な使い方

<iframe
  id="external-frame"
  src="https://service.example.com/dashboard"
></iframe>

このとき、src に指定したURLの オリジン(スキーム+ホスト+ポート) が iframeのOriginになります。

例:

  • https://service.example.com/dashboard → Origin は https://service.example.com

JavaScriptからは、次のようにアクセスできます。

const iframe = document.getElementById("external-frame");
const src = iframe.src; // "https://service.example.com/dashboard"
const url = new URL(src);
console.log(url.origin); // "https://service.example.com"
JavaScript

ここで重要なのは、 「iframeの中身は別オリジンのコンテンツかもしれない」 という前提を常に意識することです。

なぜiframeのOrigin検証が必要なのか(危険なパターンを知る)

危険な例:srcを外部から自由に変更できる設計

例えば、次のようなコードを考えます。

function setIframeSrc(url) {
  const iframe = document.getElementById("external-frame");
  iframe.src = url; // 検証なしで設定
}
JavaScript

ここで url がユーザー入力や外部設定ファイルから来ていると、

setIframeSrc("https://evil-phishing.com/login");
JavaScript

のように、攻撃者が用意したサイトを 自分の業務システムの画面内に表示してしまう可能性があります。

ユーザーから見ると、

「この会社のシステムの中に表示されている画面だから、きっと正規のものだろう」

と誤解しやすく、フィッシングの成功率が高まってしまいます。

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