【どういつおりじんぽりしー】

同一オリジンポリシー とは?

💡 よそのサイトのデータは勝手に覗けません
📌 このページのポイント
同一オリジンポリシーの仕組み オリジン = プロトコル + ドメイン + ポート ブラウザ(門番) https://my-site.com https://my-site.com 同一オリジン OK https://evil-site.com 異なるオリジン NG https://api-server.com CORS許可済み CORS OK アクセス許可 アクセス拒否 CORS許可で例外
同一オリジンポリシーのイメージ
ひよこ ひよこ

同一オリジンポリシーって何なの?

ペンギン先生 ペンギン先生

Webブラウザに備わっている「セキュリティの門番」みたいなものだよ。あるサイトのJavaScriptが、全く別のサイトのデータを勝手に読み取れないようにブロックする仕組みなんだ。

ひよこ ひよこ

なんでそんなルールが必要なの?

ペンギン先生 ペンギン先生

たとえば悪意のあるサイトを開いたとき、そのサイトのスクリプトが裏であなたの銀行サイトの残高情報を読み取れたら怖いよね?同一オリジンポリシーがあるから、別のオリジン(サイト)のデータには勝手にアクセスできないんだ。

ひよこ ひよこ

「オリジン」って具体的に何で決まるの?

ペンギン先生 ペンギン先生

3つの要素の組み合わせだよ。プロトコル(httpかhttpsか)、ドメインexample.comなど)、ポート番号(80, 443など)。この3つが全て一致して初めて「同一オリジン」と判定される。たとえば http://example.com と https://example.comプロトコルが違うから別オリジンだよ。

ひよこ ひよこ

でもAPIとか別のサーバーにリクエストしたいときはどうするの?

ペンギン先生 ペンギン先生

そこでCORSという仕組みを使うんだ。APIサーバー側が「このオリジンからのアクセスは許可するよ」とヘッダーで宣言すれば、ブラウザがそれを確認して通してくれる。同一オリジンポリシーの「例外許可証」みたいなものだね。

ひよこ ひよこ

サーバーじゃなくてブラウザが制御しているの?

ペンギン先生 ペンギン先生

いいところに気づいたね。同一オリジンポリシーはあくまでブラウザ側の制御だよ。サーバー間の通信には適用されない。だからcurlコマンドやサーバーサイドのコードからは自由にアクセスできる。ブラウザ上のJavaScriptだけが制限されるんだ。

ひよこ ひよこ

画像やCSSは別サイトから読み込めるけど、あれはどうなっているの?

ペンギン先生 ペンギン先生

<img>タグや<link>タグでの読み込みは「埋め込み」として許可されているんだ。制限されるのはJavaScriptからのデータ読み取り。画像は表示できても、JavaScriptでそのピクセルデータを読み取ろうとするとブロックされる。この微妙な違いがセキュリティの肝だよ。

ひよこ ひよこ

Webの安全を支える大事な仕組みなんだね!

ペンギン先生 ペンギン先生

そうだよ。同一オリジンポリシーはWebセキュリティの最も基本的な防御壁なんだ。これがなかったら、悪意のあるサイトを開いただけで個人情報が抜かれ放題になってしまう。開発中に「CORSエラー」に遭遇したら、この仕組みが正常に働いている証拠だと思えばいいよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「同一オリジンポリシー」って出てきたら「ブラウザが他サイトのデータを勝手に読めないようにするルール」と思えればだいたいOK!
📖 おまけ:英語の意味
「Same-Origin Policy」 = 同一オリジンポリシー
💬 Origin(起源・出所)が同じかどうかでアクセスを制御する仕組みだよ。1995年にNetscape Navigator 2.0で初めて導入されたんだ
← 用語集にもどる