OriginからXSSまで
説明の順序がわかりやすいmrsekut.icon
↓はだいぶ端折っているのでかなり雑
(CORSのない世界で)自分のサイトが、他のサイトから容易にアクセス可能だと危険
例えばgmailの中身を簡単に外部から取得することができる
何かしらの制限をもたせるべき
では、どの部分で、線引をするか?
URLのパーツに着目する
schemeやhostnameなどが含まれている
どういう組み合わせなら安全と言えるだろうか?
(scheme, domain name, port)の3つ組が良さそう
この3つ組をOriginと呼ぶ
3つとも同じならSame Origin、1つでも異なればCross Origin
「Originが同じかどうか」を線引にすると良い
これがSame-Origin Policy
これで、ある程度安全になる
では、自分が2つのdomainを管理している時に、両者をどうやって通信させるか?
両者は互いにCross Originだが、信頼できる相手であることは確定している
Same-Origin Policyが邪魔になる
これを緩和するのがCORS
CORSには2種類ある
simple requestか、そうでないか
前者の場合は、Access-Control-Allow-Originで対応
後者の場合は、Preflight Requestなどで対応
Same-Origin Policyにも抜け道がある
Cross Originから攻撃できないのであれば、Same Originから攻撃すれば良い
これがXSS
XSSのようなContent Injectionを防ぎたい
resourceの取得などに制限を設けることで、攻撃者のscriptを読むことを防ぐ
これがCSP