Webセキュリティ入門:HTTP・Cookie・脆弱性
CORSが許可しているもの
この回でやること
CORSは別オリジンからの読み取りをサーバーが明示的に許可する仕組みです。何を許し、何を許していないのかを見ます。
- 読む 約 5 分
- 最後にクイズ 1 問
このレッスンで学ぶこと
CORS は、別オリジンからの読み取りをサーバーが明示的に許可する仕組みです。許可を出すのが誰で、従うのが誰かを押さえると、設定の意味が見えてきます。
読み終えるころには、CORS を緩めることが何を意味するかを説明できます。
許可を出すのはサーバー
同一オリジンポリシーは応答を読ませません。しかし正当な理由で読ませたい場面があります。自社のフロントエンドが、別ドメインのAPIを呼ぶような形です。
そこで、サーバー側が「このオリジンには読ませてよい」と返答で宣言します。 これが CORS です。
http
Access-Control-Allow-Origin: https://app.example.comブラウザはこの宣言を見て、読み取りを許すかどうかを決めます。許可を出しているのはサーバーで、判断しているのはブラウザという役割分担です。
先に確認が飛ぶことがある
単純でない要求のとき、ブラウザは本番の前に OPTIONS で確認を送ります。許可されているメソッドやヘッダーを尋ねる工程です。
ここで許可が下りなければ、本番の要求は送られません。ただしこれは、本番の要求が絶対に届かないという意味ではありません。 ブラウザ以外からは直接送れます。
緩めるときに起きること
よくある事故が2つあります。
すべてのオリジンを許可する。 Access-Control-Allow-Origin: * は、誰にでも読ませる宣言です。公開情報だけを返すAPIなら妥当ですが、ログイン状態で内容が変わるAPIに付けてはいけません。
送られてきたオリジンをそのまま返す。 要求の Origin をコピーして許可に入れると、どのオリジンからでも読めるのと同じになります。許可する相手は、サーバー側の一覧で持ちます。
CORS は、ブラウザが元から持っている制限を緩めるための仕組みです。設定を足すほど守りが厚くなるわけではありません。緩める方向にしか動きません。
認可の代わりにならない
CORS はブラウザの中の話です。ブラウザ以外からの要求には効きません。誰が何をしてよいかの判断は、CORS ではなく認可で行います。