見出し画像

[W3C]Referrer Policyについて

W3CのWeb Application Security WG が公開している、「Referrer Policy」というRecommendationを解説していきます。英語の原文は以下です。

概要

ウェブサイトのreferrer policyの定め方や、外部に対するリクエストのRefererヘッダーに対してどんなポリシーを設定できるのかを説明している文書です

そもそもRefererヘッダーとは

RefererヘッダーはMDNのドキュメントを見ると以下のように記載があります。

Referer リクエストヘッダーには、現在リクエストされているページへのリンク先を持った直前のウェブページのアドレスが含まれています。Referer ヘッダーにより、サーバーは人々がどこから訪問しに来たかを識別し、分析、ログ、キャッシュの最適化などに利用することができます。

https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Referer

例えば、Google検索からとあるサイトに遷移した場合はRefererヘッダーにgoogle.comが入ります

Refererヘッダーに制御が必要な理由

1. プライバシーの観点

遷移元のURLが個人情報を含むようなサイトだった場合、遷移先のサイトにRefererヘッダーを通じて個人情報が漏れる可能性があります

2. セキュリティーの観点

遷移元のアプリケーションがURLベースのセッションidを使っている場合、Refererヘッダーを通してセッションIDが漏れてしまう可能性があります。

Referrer Policyの種類について

リファラポリシーには次のような種類があります。

""(空文字)

他のReferrer policyにフォールバックする。もしなければ"no-referrer-when-downgrade" がデフォルト

"no-referrer"

リファラの情報を全く送らない

"no-referrer-when-downgrade"

  • プロトコルのセキュリティ水準が同一である、または向上する場合 (HTTP→HTTP, HTTP→HTTPS, HTTPS→HTTPS)場合は、URL全体を送信

  • セキュリティ水準が低下するリクエスト (HTTPS→HTTP, HTTPS→file)の場合は何も送信しない

"same-origin"

同じオリジンの場合はURL全体を送る。それ以外は何も送らない。

"origin"

オリジンの情報だけ送る

"strict-origin"

  • プロトコルのセキュリティ水準が同じである場合 (HTTPS→HTTPS)場合は、オリジンのみ送信

  • 安全性の低下する移動先 (HTTPS→HTTP)の場合は何も送信しない

"origin-when-cross-origin":

同じオリジンの場合はURL全体、クロスオリジンの場合はオリジンだけを送る

"strict-origin-when-cross-origin"

  • 同じオリジンの場合はURL全体を送信

  • プロトコルのセキュリティ水準が同じである場合 (HTTPS→HTTPS)は、オリジンのみ送信

  • 安全性の低下する移動先 (HTTPS→HTTP)の場合は何も送信しない

"unsafe-url"

全てのリクエストに対してURL全体を送る