web-dev-qa-db-ja.com

httpsページからhttpページに移動すると、HTTPヘッダーリファラーが送信されますか?

いくつかのテストを行った後、httpsページからhttpページをクリックしても、ブラウザーはリファラーHTTPヘッダーを送信しないという結論に達し始めています。

それはどのようなセキュリティ上の理由ですか?規格のどこかに定義されていますか?

38
jeje

HTTP RFC の状態、セクション 15.1.3重要な情報をURIにエンコードする

参照ページがセキュアプロトコルで転送された場合、クライアントは(非セキュア)HTTPリクエストにリファラーヘッダーフィールドを含めるべきではありません(SHOULDNOT)。

したがって、これは予想される/標準的な動作です。

53
Pascal MARTIN

これによると、実際にはもうそれほど単純ではありません(2014年以降) リファラーポリシーに関するw3cドキュメント

デフォルトの動作では、HTTPSからHTTPに移行するときに、ブラウザーはリファラー情報を送信しません。ただし、ブラウザはHTTPSからHTTPSに移行するときにリファラーを送信します。

また、HTML5には、referrerという名前の新しいメタタグがあります。これは次のようになります。

<meta name="referrer" content="Origin">

新しいブラウザはすでにこれを実装しています 。したがって、ブラウザがリファラーを送信するかどうかは、近い将来、このメタタグに依存します。このメタタグがページのHTMLに含まれていない場合、ブラウザはデフォルトの動作を使用します。

以下は、リファラーメタタグのコンテンツ属性の可能な値です。

  • no-referrer:HTTPまたはHTTPSに関係なく、リファラーは送信されません
  • オリジン:オリジン(メイン)ドメインのみが参照元として送信されます
  • Origin-when-crossorigin:同一生成元は完全なリファラーURLを送信し、クロスオリジンはリファラーとしてオリジンURLのみを送信します
  • no-referrer-when-downgrade:これは、ページにリファラーメタタグが指定されていない場合のデフォルトの動作です。
  • unsafe-url:これは、HTTPまたはHTTPSに関係なく、常にリファラーを送信します

また、リファラーメタタグにはいくつかのレガシー属性値があります。これらは推奨されなくなりましたが、現時点では多くのサイトで使用されています。

  • 決して:リファラーなしと同じ
  • デフォルト:no-referrer-when-downgradeと同じ
  • 常に:unsafe-urlと同じ

この情報が、2014年以降にこの投稿を見つけたばかりの人に役立つことを願っています。

20
Fayaz

はい、 標準 で定義されています:

参照ページがセキュアプロトコルで転送された場合、クライアントは(非セキュア)HTTPリクエストにリファラーヘッダーフィールドを含めるべきではありません

17
AviD

理由:SessionIDがURLエンコードされている場合があります。 HTTPページには、HTTPS通信からセッションを盗むクロスサイトスクリプティングを含めることができます。これを防ぐために、リファラーはHTTPSからHTTPへの移行で送信されないため、URLエンコードされたsessinIDが盗まれる可能性はありません。

4