Chrome の新しいデフォルトの Referrer-Policy - strict-origin-when-cross-origin

Maud Nalpas
Maud Nalpas

始める前に:

  • 「サイト」と「オリジン」の違いがわからない場合は、「同一サイト」と「同一オリジン」についてをご覧ください。
  • 仕様で誤字脱字があったため、Referer ヘッダーに R がありません。JavaScript と DOM の Referrer-Policy ヘッダーと referrer のスペルは正しいです。

概要

  • ウェブサイトにポリシーが設定されていない場合に適切な代替手段を提供するため、ブラウザはプライバシー保護を強化したデフォルトのリファラー ポリシーへと進化しています。
  • Chrome では、85 で strict-origin-when-cross-origin をデフォルト ポリシーとして段階的に有効にすることを計画しています。これにより、別のオリジンのリファラー値に依存するユースケースに影響する可能性があります。
  • これは新しいデフォルトですが、ウェブサイトは任意のポリシーを選択できます。
  • Chrome でこの変更を試すには、chrome://flags/#reduced-referrer-granularity でフラグを有効にします。こちらのデモで変更内容を確認することもできます。
  • 参照元ポリシー以外にも、ブラウザが参照元を処理する方法が変更される可能性があるため、注意が必要です。

変更点とその理由

HTTP リクエストには、リクエストの送信元のオリジンまたはウェブページの URL を示すオプションの Referer ヘッダーが含まれる場合があります。Referer-Policy ヘッダーでは、Referer ヘッダーで利用可能なデータと、リンク先の document.referrer でナビゲーションと iframe に利用可能なデータを定義します。

サイトからのリクエストの Referer ヘッダーで送信される情報は、設定した Referrer-Policy ヘッダーによって決まります。

図: リクエストで送信された参照元。
Referrer-Policy と Referrer

ポリシーが設定されていない場合は、ブラウザのデフォルトが使用されます。多くのウェブサイトは、ブラウザのデフォルト設定に従います。

ナビゲーションと iframe の場合、Referer ヘッダーに存在するデータには、document.referrer を使用して JavaScript からアクセスすることもできます。

これまで、no-referrer-when-downgrade はブラウザ間で広くデフォルトのポリシーとして使用されていました。しかし現在、多くのブラウザはプライバシー保護を強化したデフォルト設定への移行の段階にあります。

Chrome では、バージョン 85 以降でデフォルト ポリシーを no-referrer-when-downgrade から strict-origin-when-cross-origin に切り替える予定です。

つまり、ウェブサイトにポリシーが設定されていない場合、Chrome はデフォルトで strict-origin-when-cross-origin を使用します。なお、ご希望のポリシーは引き続き設定できます。この変更は、ポリシーが設定されていないウェブサイトにのみ影響します。

これに伴う影響

strict-origin-when-cross-originプライバシーを強化しています。このポリシーでは、クロスオリジン リクエストの Referer ヘッダーにオリジンのみが送信されます。

これにより、パスやクエリ文字列など、完全な URL の他の部分からアクセスできる可能性のある非公開データの漏洩を防ぐことができます。

図: クロスオリジン リクエストで、ポリシーに応じて送信されるリファラー。
ポリシーに応じて、クロスオリジン リクエストで送信されたリファラー(および document.referrer)。

次に例を示します。

https://site-one.example/stuff/detail?tag=red から https://site-two.example/ に送信されたクロスオリジン リクエスト:

  • no-referrer-when-downgrade: Referer: https://site-one.example/stuff/detail?tag=red の場合。
  • strict-origin-when-cross-origin: Referer: https://site-one.example/ を使用します。

これまでと変わらない点

  • no-referrer-when-downgrade と同様に、strict-origin-when-cross-origin安全です。HTTPS オリジン(安全)から HTTP オリジン(安全でない)にリクエストが送信された場合、リファラー(Referer ヘッダーと document.referrer)は存在しません。これにより、ウェブサイトが HTTPS を使用している場合(使用していない場合は優先的に使用してください)、HTTPS 以外のリクエストでウェブサイトの URL が漏洩することはありません。これは、ネットワーク上のすべてのユーザーが URL を閲覧できるため、ユーザーが中間者攻撃の危険にさらされるためです。
  • 同じオリジン内では、Referer ヘッダーの値は完全な URL です。

たとえば、https://site-one.example/stuff/detail?tag=red から https://site-one.example/ に送信された同一オリジン リクエストは次のようになります。

  • strict-origin-when-cross-origin の場合: 参照元: https://site-one.example/stuff/detail?tag=red

影響

他のブラウザとの議論と Chrome 84 で実施された Chrome 独自のテストに基づくと、ユーザーに見える破損は限定的であると考えられます

完全な参照元 URL が利用可能であることを前提とするサーバーサイドのログや分析は、その情報の粒度が低下することで影響を受ける可能性があります。

必要なご対応について

Chrome では、85 で新しいデフォルトの参照ポリシーのロールアウトを開始する予定です(ベータ版は 2020 年 7 月、安定版は 2020 年 8 月)。ステータスは Chrome のステータス エントリで確認できます。

変化を理解して検出する

新しいデフォルト設定の変更内容を実際に確認するには、こちらのデモをご覧ください。

このデモを使用して、実行中の Chrome インスタンスに適用されているポリシーを検出することもできます。

変更をテストして、サイトに影響するかどうかを確認する

この変更は Chrome 81 以降ですでにお試しいただけます。Chrome で chrome://flags/#reduced-referrer-granularity にアクセスしてフラグを有効にしてください。このフラグを有効にすると、ポリシーのないすべてのウェブサイトで新しい strict-origin-when-cross-origin デフォルトが使用されます。

Chrome のスクリーンショット: chrome://flags/#reduced-referrer-granularity フラグを有効にする方法。
フラグの有効化。

これで、ウェブサイトとバックエンドの動作を確認できます。

影響を確認するもう 1 つの方法は、ウェブサイトのコードベースでリファラが使用されているかどうかを確認することです。これは、サーバーで受信したリクエストの Referer ヘッダー経由で、または JavaScript の document.referrer から確認できます。

サイトへの別のオリジンからのリクエストの参照元(具体的にはパスやクエリ文字列)を使用していて、そのオリジンがブラウザのデフォルトの参照元ポリシーを使用している(つまりポリシーが設定されていない)場合、サイトの一部の機能が動作しなくなったり、動作が異なってしまうことがあります。

これがサイトに影響する場合は、代替手段を検討してください

リファラを使用してサイトへのリクエストの完全なパスまたはクエリ文字列にアクセスする場合は、次の方法があります。

  • CSRF 保護、ロギングなどのユースケースには、OriginSec-fetch-Site などの代替手法とヘッダーを使用します。Referer と Referrer-Policy: ベスト プラクティスをご覧ください。
  • 必要に応じて、特定のポリシーについてパートナーと連携し、ユーザーに透明性を提供できます。アクセス制御(ウェブサイトが参照元を使用して、他のオリジンに対するリソースへの特定のアクセス権を付与する場合)がそのようなケースに該当する可能性があります。ただし、Chrome の変更により、オリジンは引き続き Referer ヘッダー(および document.referrer)で共有されます。

なお、ほとんどのブラウザはリファラーに関して同様の方向に進んでいます(ブラウザのデフォルトとその進化については、リファラーとリファラー ポリシー: ベスト プラクティスをご覧ください)。

サイト全体にプライバシー保護強化ポリシーを明示的に実装する

ウェブサイトから送信されるリクエストで送信する Referer はどれですか。つまり、サイトに設定するポリシーはどれですか。

Chrome の変更を考慮しても、strict-origin-when-cross-origin などの明示的なプライバシー保護ポリシーを設定することをおすすめします。

これにより、ユーザーを保護し、ブラウザ間でウェブサイトの動作をより予測可能にします。ほとんどの場合、サイトをブラウザのデフォルトに依存させるのではなく、管理できるようにします。

ポリシーの設定について詳しくは、参照元と参照元ポリシー: ベスト プラクティスをご覧ください。

Chrome Enterprise について

Chrome エンタープライズ ポリシー ForceLegacyDefaultReferrerPolicy は、エンタープライズ環境で以前のデフォルトのリファラー ポリシー no-referrer-when-downgrade を強制的に適用する IT 管理者が使用できます。これにより、企業はアプリケーションのテストと更新に時間を割くことができます。

このポリシーは Chrome 88 で廃止されます。

フィードバックを送信

フィードバックや報告事項がある場合は、Chrome のリリースに関する意向に関するフィードバックを共有するか、@maudnals に質問をツイートしてください。

すべてのレビュー担当者(特に Kaustubha Govind、David Van Cleve、Mike West、Sam Dutton、Rowan Merewood、Jxck、Kayce Basques)のご協力とフィードバックに感謝いたします。

リソース