Cross-Origin Resource Policy (CORP)


Cross-Origin Resource Policy (CORP)

とは何か

元来Web上のリソースは他のオリジンからのリクエスト(<script>, <img> etc.)応答に対しオープンなものだったが、

Webの用途・技術・APIの高度化に伴い、この「オープンさ」がセキュリティリスクを孕むようになった。

Cross-Origin Resource Policy (CORP)は、これらリソースへのリクエストに対し許可する範囲(同一サイト(same-site) or 同一オリジン(same-origin) or 誰でも(cross-origin))を公開ポリシーとして指定することで、悪意あるサイトによって不正に情報が搾取されるなどのリスクから自サイトとそのユーザを保護できるようにした仕組みのことである。

Cross-Origin Resource Sharing (CORS)との違い

Cross-Origin Resource Policy (CORP)は、上述の通りリクエストの受け付ける範囲を制限するもの。(これにsame-site/same-originが設定されると、そもそもクロスオリジンリクエストが成立しない。)
一方Cross-Origin Resource Sharing (CORS)は、(クロスオリジンリクエストがCross-Origin Resource Policy (CORP)によって制限されていないことを前提に)クロスオリジンリクエストに対して「どのオリジンから」「どのような」リクエストを許可するかを設定する。

設定方法

サーバサイドからHTTPレスポンスヘッダで指定する。

Cross-Origin-Resource-Policy: same-site | same-origin | cross-origin

指定可能な値は以下(制限が厳しい(i.e. 安全な)順)

  • same-origin: 同一オリジン(http/https、サブドメイン、ポートまで揃える必要がある)
  • same-site: 同一サイト
  • cross-origin: クロスオリジン(誰でも)

注意点

前述の通り、通信そのものはレスポンスヘッダが付加されただけで
レスポンスの保護自体はWebブラウザがレスポンスデータを受け取ったあと

レスポンスボディが空だったかのように扱うことで実現される。

したがって、例えばブラウザを利用しないテキストベースのリクエストからであれば普通に中身が見れる。

(ただ、個人情報などは通常ログインが必要なはずで、であればCookieなどの認証情報が必要となり、そしてその情報はブラウザが暗号化を施した上でローカルに保存しているはずなので、よっぽどのことがない限り大丈夫。)

防げるセキュリティ上の脅威

  • Spectreを含む)サイドチャネル攻撃
  • クロスサイト・スクリプト・インクルージョン(XSSI: Cross-Site Script Inclusion)

参照