Webセキュリティ入門:HTTP・Cookie・脆弱性
同一オリジンポリシーとは
この回でやること
同一オリジンポリシーとは、ブラウザが持つ基本の仕切りです。何が同じオリジンで何が違うのかを正確に押さえます。
- 読む 約 5 分
- 最後にクイズ 1 問
このレッスンで学ぶこと
同一オリジンポリシーは、ブラウザが別サイト同士のあいだに引いている基本の仕切りです。何が同じで何が違うのかと、その仕切りがどこまで効くのかを確かめます。
読み終えるころには、この仕切りが守るものと守らないものを区別できます。
オリジンの定義
オリジンは3つの組で決まります。スキーム、ホスト、ポートです。ひとつでも違えば別のオリジンです。
https://example.com を基準にすると、こうなります。
| 相手 | 同じか | 理由 |
|---|---|---|
https://example.com/other | 同じ | パスは関係しない |
http://example.com | 違う | スキームが違う |
https://api.example.com | 違う | ホストが違う |
https://example.com:8443 | 違う | ポートが違う |
サブドメインは別オリジンです。ここはよく間違えられます。
何を止めているか
同一オリジンポリシーは、あるオリジンのページが、別オリジンの応答内容を読むことを止めます。
悪意のあるページを開いてしまっても、そのページからあなたのサービスの応答を読み出せません。これが無ければ、1枚のページを開くだけで、開いている全サービスの中身が抜かれます。
何を止めていないか
ここが今回の要です。送信そのものは止めていません。
別オリジンへ要求を送ることはできます。止まるのは、返ってきた内容を読むところです。そして送信のときには、前に学んだとおり Cookie が自動で付きます。
攻撃者のページからあなたのサービスへ、利用者のログイン状態のまま要求が届きます。応答は読めませんが、その要求で状態が変わってしまえば目的は果たされます。 ここが CSRF の成立条件です。
例外的に読める形
古くからある要素は、この仕切りの外にあります。画像、スタイルシート、スクリプトは別オリジンから読み込めます。
だから外部スクリプトの読み込みには注意が要ります。読み込んだスクリプトは、読み込んだページのオリジンの権限で動きます。 提供元が乗っ取られると、そのままこちらに影響します。