“referrerpolicy”属性、“name="referrer"”
サンプルコード
リンク先を開く時にリファラーを送信しない
<a href="http://www.sample.com/sample.html" referrerpolicy="no-referrer">リンク</a>
文書からリクエストを送信する時にリンク先が同じオリジンの場合は完全なリファラーを送信する
<meta name="referrer" content="same-origin">
“referrerpolicy”属性はリンク先を読み込む時のリファラーポリシーを指定します。
“name="referrer"”が指定された“meta”要素の“content”属性は文書からリクエストを送信する時のリファラーポリシーを指定します。
属性値はあらかじめ指定されているリファラーポリシーを利用します。
使用できる要素
“referrerpolicy”属性
要素 | 説明 |
---|---|
<a> | リンク先を読み込む時のリファラーポリシーを指定 |
<area> | リンク先を読み込む時のリファラーポリシーを指定 |
<iframe> | 埋め込む文書を読み込む時のリファラーポリシーを指定 |
<img> | 埋め込む画像を読み込む時のリファラーポリシーを指定 |
<script> | スクリプトを読み込む時とスクリプトがリソースを読み込む時ののリファラーポリシーを指定 |
<link> | リソースを読み込む時のリファラーポリシーを指定 |
“name="referrer"”
“meta”要素に“name="referrer"”を指定する場合、“content”属性を使用してリファラーポリシーを指定することができます。
要素 | 説明 |
---|---|
<meta> | 文書からリクエストを送信する時のリファラーポリシーを指定 |
リファラーポリシー
“リファラーポリシー”とは?
“リファラー(Referrer)”、もしくは“HTTPリファラー”はブラウザが文書を開く時や、その文書からリンクされているリソースを読み込もうとする時にウェブサーバーに送信されるHTTPリクエストに含まれる参照元の文書のURLのことです。この“リファラー”は通常ウェブサーバーに記録されるほか、多くのウェブサイトではリファラーを使用して訪問者がどのウェブサイトからやってきたのかを解析しています。
URLにユーザー名やIDなどセキュリティー上外部に漏らしてはいけない情報が含まれる場合や、何らかの理由でリンク元のURLを知られたくない場合は“リファラーポリシー”によってこれを制御することができます。“リファラーポリシー”は“リファラー”を送信するかどうかを制御するための決まり事で、送信される“リファラー”の内容を制御したり、“リファラー”を送信しないようにすることができます。
また、現代の多くのブラウザでは、リンク元の文書がHTTPSでリンク先がHTTPである場合など、セキュリティレベルが低いリンク先へのHTTPリクエストにはリファラーを送信しません。この場合も“リファラーポリシー”によって通常は送信されないリファラーを送信されるようにすることができます。
リファラーポリシーの指定方法
リファラーポリシーは以下の方法で決められます。
- “noreferrer”が指定された“rel”属性
- “referrerpolicy”属性
- “name="referrer"”が指定された“meta”要素
- “Referrer-Policy”HTTPヘッダ
この一覧で上位にあるものが優先されます。
リファラーポリシーの一覧
リファラーポリシーを指定する“referrerpolicy”属性と“name="referrer"”が指定された“meta”要素の“content”属性の値はあらかじめ定義されているリファラーポリシーを指定する必要があります。
リファラーポリシー | 説明 | no-referrer | リファラーを送信しない |
---|---|
no-referrer-when-downgrade | 現在の文書もリンク先もHTTPSである場合などリンク元とリンク先のセキュリティレベルが同等と思われる場合は完全なURLをリファラーとして送信し、現在の文書がHTTPSでリンク先がHTTPである場合などリンク元よりリンク先のセキュリティレベルが低い場合はリファラーを送信しない |
same-origin | 現在の文書とリンク先が同じドメインの場合などリンク元とリンク先が同じオリジンの場合は完全なURLをリファラーとして送信し、異なるオリジンの場合はリファラーを送信しない |
origin | リファラーを送信するがリンク元のオリジン(ドメイン以降の情報を含まない)のみをリファラーとして送信する |
strict-origin | 現在の文書もリンク先もHTTPSである場合などリンク元とリンク先のセキュリティレベルが同等と思われる場合はリンク元のオリジン(ドメイン以降の情報を含まない)のみをリファラーとして送信し、リンク元よりリンク先のセキュリティレベルが低い場合はリファラーを送信しない |
origin-when-cross-origin | 現在の文書とリンク先が異なるオリジンの場合はリンク元のオリジンのみをリファラーとして送信し、同じ場合は完全なURLをリファラーとして送信する |
strict-origin-when-cross-origin | リンク元とリンク先が同じオリジンの場合は完全なURLをリファラーとして送信し、現在の文書もリンク先もHTTPSである場合などリンク元とリンク先のセキュリティレベルが同等と思われる場合は文書のオリジン(ドメイン以降の情報を含まない)のみをリファラーとして送信し、リンク元よりリンク先のセキュリティレベルが低い場合はリファラーを送信しない |
unsafe-url | 完全なURLをリファラーとして送信する |
リファラーポリシーを指定しない場合や、属性に空の値を指定する場合の規定値は現在の文書から見てリンク先のセキュリティーレベルが低い(HTTPSからHTTPへのリンクなど)場合はリファラーを送信しない“no-referrer-when-downgrade”となります。
それぞれの値を指定した時に送信されるリファラーは以下のようになります。
リファラーポリシー | 現在の文書とリンク先がオリジンが同じ | 現在の文書とリンク先はオリジンが異なる | 現在の文書がHTTPSでリンク先がHTTP | no-referrer | リファラーを送信しない | リファラーを送信しない | リファラーを送信しない |
---|---|---|---|
no-referrer-when-downgrade | 完全なURLをリファラーとして送信する | 完全なURLをリファラーとして送信する | リファラーを送信しない |
same-origin | 完全なURLをリファラーとして送信する | リファラーを送信しない | リファラーを送信しない |
origin | リンク元のオリジンのみをリファラーとして送信する | リンク元のオリジンのみをリファラーとして送信する | リンク元のオリジンのみをリファラーとして送信する |
strict-origin | リンク元のオリジンのみをリファラーとして送信する | リンク元のオリジンのみをリファラーとして送信する | リファラーを送信しない |
origin-when-cross-origin | 完全なURLをリファラーとして送信する | リンク元のオリジンのみをリファラーとして送信する | リンク元のオリジンのみをリファラーとして送信する |
strict-origin-when-cross-origin | 完全なURLをリファラーとして送信する | リンク元のオリジンのみをリファラーとして送信する | リファラーを送信しない |
unsafe-url | 完全なURLをリファラーとして送信する | 完全なURLをリファラーとして送信する | 完全なURLをリファラーとして送信する |
使用例
リンク先を開く時にリファラーを送信しない
<a href="http://www.sample.com/sample.html" referrerpolicy="no-referrer">リンク</a>
文書からリクエストを送信する時にリンク先が同じオリジンの場合は完全なURLをリファラーとして送信する
<meta name="referrer" content="same-origin">
画像を読み込む時に完全なURLをリファラーとして送信する
<img src="http://www.sample.com/img/sample.png" alt="サンプル画像" referrerpolicy="unsafe-url">