Shikata Ga Nai

Private? There is no such things.

同一生成元ポリシー(Same-Origin Policy)とは?

Hello there, ('ω')ノ

🧭 概要

同一生成元ポリシー(Same-Origin Policy, SOP)は、ウェブブラウザが採用しているクロスオリジン制限の基本的なセキュリティモデルです。このポリシーは、悪意あるウェブサイトが他のサイトのデータに不正にアクセスするのを防ぐために設けられました。


🌐 「オリジン(Origin)」とは?

オリジンは次の3つの要素の組み合わせで構成されます:

  • スキーム(http / https)
  • ホスト名(例:example.com)
  • ポート番号(例::80, :443)

同一オリジンの例:

  • https://example.com/page1.html
  • https://example.com/page2.html

異なるオリジンの例:

  • http://example.com(スキームが違う)
  • https://api.example.com(ホスト名が違う)
  • https://example.com:8080(ポートが違う)

🚫 同一生成元ポリシーの制限内容

このポリシーにより、あるオリジンのウェブページから、別のオリジンのリソースの内容を読み取ることは基本的に禁止されます。

たとえば、次のような操作が制限されます:

  • <iframe> に読み込まれたページの内容にアクセスする
  • 別オリジンのCookieやLocalStorageを参照・変更する
  • JavaScriptで別オリジンのページのDOMにアクセスする

ただし、リクエスト自体は送信可能です。つまり、JavaScriptで fetchXMLHttpRequest を使って別オリジンにリクエストを送ることはできますが、レスポンスの中身を見ることはできません。


🔐 なぜ重要なのか?

同一生成元ポリシーは、次のようなセキュリティリスクからユーザーを守ります:

  • セッションハイジャック
  • プライバシーの侵害(他サイトの個人情報の読み取り)
  • 認証済みユーザーのデータ不正取得

このポリシーがなければ、例えばあなたがログインしているSNSのタブが開いている間に、別の不正なサイトからそのセッション情報を盗むことが可能になります。


🧩 補足:CORSとの関係

CORS(Cross-Origin Resource Sharing)は、この同一生成元ポリシーを柔軟に拡張し、安全に例外的なクロスオリジンアクセスを可能にする仕組みです。CORSを通じてサーバー側が適切なレスポンスヘッダーを返すことで、他オリジンからのアクセスが許可されるケースもあります。


🔚 まとめ

  • 同一生成元ポリシーはWebの最も基本的なセキュリティモデルであり、データの不正な取得を防ぐために存在します。
  • クライアントサイド(ブラウザ)でのリソースの読み取り制限が主な役割です。
  • 安全にオリジンを越えた通信を行うには、CORSの設定が必要です。

Webアプリケーションのペネトレーションテストにおいて、同一生成元ポリシーの理解は不可欠です。攻撃側も防御側も、このルールの挙動を正しく理解することで、効果的なセキュリティ対策が可能になります。

Best regards, (^^ゞ