httpsウェブサイトにリファラーhttpsとhttpジャンプリファラーを送信させる方法

httpsウェブサイトにリファラーhttpsとhttpジャンプリファラーを送信させる方法

この記事では、HTTP プロトコルのリファラーのメタデータ パラメータの提案について説明します。このメタデータ パラメータを使用すると、HTML ドキュメントは、リファラーを送信するか、ホスト名のみを送信するか、完全なリファラーを送信するかなど、HTTP リクエストのリファラーを制御できます。リファラを制御する方法は、フラッシュや js のトリックなどいくつかありますが、この記事では別の図で説明します。

使用シナリオ

場合によっては、何らかの理由により、Web サイトがページからサーバーに送信されるリファラー情報を制御する必要があり、このリファラー メタデータ パラメータを使用できます。

プライバシー

ソーシャル ネットワーキング サイトには一般に、ユーザーの個人ページがあり、ユーザーはそこに外部リンクを追加できます。ソーシャル ネットワーキング サイトでは、ユーザーがこれらのリンクをクリックしたときにユーザー ページの URL を公開したくない場合があります。これは、これらの URL に機密情報が含まれている可能性があるためです。もちろん、一部のソーシャル ネットワーキング サイトでは、完全な URL 情報ではなく、リファラーにホスト名のみを提供することを希望する場合があります。

安全性

https を使用する一部の Web サイトでは、URL 内のパラメータ (sid など) をユーザーの ID 認証情報として使用し、他の https Web サイトからリソースを導入する必要があります。この場合、Web サイトはユーザーの ID 認証情報を漏洩させたくありません。

オブジェクト能力規律

一部のウェブサイトは Object-Capability Discipline に従っていますが、リファラーはこの戦略に反しています。したがって、ウェブサイトがリファラーを制御できる場合は Object-Capability Discipline にとって有益です。

技術詳細

referer の metedata パラメータは、次のタイプの値に設定できます。

一度もない
いつも
起源
デフォルト

ドキュメントにメタ タグが挿入され、name 属性の値が referer である場合、ブラウザー クライアントは次のようにタグを処理します。

1.メタタグにコンテンツ属性がない場合、以下の操作をすべて終了します。
2.コンテンツの値をreferrer-policyにコピーし、小文字に変換します。
3. コンテンツの値が上記のリストのいずれかであるかどうかを確認します。そうでない場合は、値をデフォルトに設定します。

上記の手順の後、ブラウザがその後 http リクエストを開始すると、content の値に応じて次のように応答します (以下の referer-policy の値は、meta タグ内の content の値です)。

1. referer-policy の値が never の場合: http ヘッド内の referer を削除します。
2. referer-policy の値がデフォルトの場合: 現在のページが https プロトコルを使用しており、ロードされるリソースが通常の http プロトコルを使用している場合は、http ヘッダーの referer を空に設定します。
3. referer-policy の値が origin の場合: origin 部分のみが送信されます。
4. referer-policy の値が always の場合: http ヘッダーの referer 値は変更されません。注: この場合、現在のページが https プロトコルを使用し、ロードされるリソースが http プロトコルを使用する場合、リソースをロードするためのリクエスト ヘッダーにも referer が含まれます。

ページに次のメタ タグが含まれている場合、現在のページから開始されたすべてのリクエストにはリファラーが含まれません。

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

ページに次のメタ タグが含まれている場合、現在のページから開始された http リクエストには、完全な URL ではなく、オリジン部分のみが伝送されます (注: 元のテキストのコンテキストによると、ここでのオリジンはスキーマとホスト名を含む部分的な URL であり、パスなどの他の URL 部分は含まれないことがわかります)。

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

注意: この記事で説明されているメタタグを使用すると、ブラウザの本来のリファラー戦略が崩れます。例えば、http ページから https ページにジャンプする場合、適切な値が設定されていれば、リファラーも伝わります。

その他の問題

これは rel=noreferer とどう関係するのでしょうか? rel=noreferer により、この記事のメタ タグで設定された値が上書きされる可能性があります。それが機能的なカバレッジです。
origin 情報は完全な URL ではないため、ブラウザ クライアントはパス部分として origin の後に / を追加する可能性があります。
起源が一意である場合はどうなりますか?リファラーは無視されると推定されます。

翻訳者メモ

この記事は2012年に執筆されました。現在、元のページは放棄され、w3cのreferer-policyページが提供されています。しかし、翻訳者は、多くのウェブサイトがCSRF防御時にリファラ検証方式を使用しており、時にはリファラを空にしていることに気付きました。また、BATメーカーの一部の重要なビジネスもリファラ検証方式を使用しており、JSONハイジャック防御時にリファラを空にしています。この記事で説明されていることは単なる提案だと思うかもしれませんが、Firefoxは21日の記事で、Firefox 36ベータ版からリファラポリシーをサポートすると発表しており、これは間違いなく一部のメーカーのビジネスを脅かすでしょう。

[参照元 wiki.whatwg.org、FreeBuf Hackers and Geeks (FreeBuf.COM) からのものであることを明記してください]

https および http リファラジャンプの問題

HTTP プロトコル ヘッダーの Referer は主に、サーバーがソース ページ、つまりユーザーがどのページからアクセスしてきたかを判断するために使用されます。取得メソッド: $_SERVER['HTTP_REFERER']

https->http リダイレクトではリファラルを渡すことは推奨されませんが、https->https および http->https ではそのような問題はありません。

たとえば、QR コード インターフェイス アドレスを取得します。

正しい効果

https://qrcode.artron.net/?text=https|http://m-exhibit.artron.net/&el=10&margin=1

エラーの影響

http://qrcode.artron.net/?text=https://m-exhibit.artron.net/jump/index

検証結果によると、https は http の一部のパラメータの問題と互換性がありますが、http は https のパラメータの問題と互換性がありません。http と https の違いは次のとおりです。

ハイパーテキスト転送プロトコル (HTTP) は、Web ブラウザーと Web サイト サーバー間で情報を転送するために使用されます。 HTTP プロトコルはコンテンツをプレーンテキストで送信し、いかなる形式のデータ暗号化も提供しません。攻撃者が Web ブラウザと Web サイト サーバー間の送信メッセージを傍受した場合、攻撃者はその中の情報を直接読み取ることができます。したがって、HTTP プロトコルは、クレジットカード番号やパスワードなどの機密情報を送信するのには適していません。
HTTP プロトコルのこの欠陥を解決するには、別のプロトコル、Secure Sockets Layer Hypertext Transfer Protocol (HTTPS) を使用する必要があります。データ転送のセキュリティを確保するために、HTTPS は HTTP に基づく SSL プロトコルを追加します。SSL は証明書を使用してサーバーの ID を検証し、ブラウザーとサーバー間の通信を暗号化します。

HTTPS と HTTP の主な違いは次のとおりです。

1. https プロトコルでは、CA からの証明書の申請が必要です。一般的に、無料の証明書はほとんどなく、料金を支払う必要があります。
2. http はハイパーテキスト転送プロトコルであり、情報はプレーンテキストで送信されますが、https は安全な SSL 暗号化転送プロトコルです。
3. http と https は完全に異なる接続方法と異なるポートを使用します。前者は 80 で、後者は 443 です。
4. http 接続は非常にシンプルでステートレスです。HTTPS プロトコルは、SSL + HTTP プロトコルによって構築されたネットワーク プロトコルであり、暗号化された送信と ID 認証を実行でき、http プロトコルよりも安全です。

質問に対する回答は次のとおりです。

上記の説明によると、一般的に、HTTPS サイトから HTTP サイトにリダイレクトする場合、ブラウザはデフォルトではリファラを送信しません。ブラウザにリファラを送信させるには、大きく分けて 2 つの方法があります。

1.ステーションAの先頭に追加

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

2. ステーションBもHTTPSを使用する

もちろん、ステーション A にリファラーを送信しないという強制ルールがあり、ステーション B がステーション A を制御できない場合は、前述のように、サードパーティの統計ツールを制御して Baidu の検索ソース キーワードをカウントすることはできません。

<<:  MySQL で SQL 文の実行時間を表示する方法

>>:  左右の幅を固定し、中央の幅を適応させたHTMLレイアウトのソリューションの詳細な説明

推薦する

mysql8 共通テーブル式 CTE 使用例の分析

この記事では、例を使用して、MySQL 8 の共通テーブル式 (CTE) の使用方法を説明します。ご...

MySql インポート CSV ファイルまたはタブ区切りファイル

別のライブラリから別のライブラリにデータをインポートする必要がある場合があり、このデータは CSV ...

テーブルの最大幅と最小幅を設定する際の互換性の問題と解決策の詳細な説明

テーブル内の min-width と max-width プロパティの設定 <テーブル>...

Flash が HTML div 要素を覆わないようにする方法

今日、フラッシュ広告のコードを書いていたとき、フラッシュに付属するリンクはポップアップ広告と間違われ...

Vueベースのカスタムコンポーネントを実装してアイコンを導入する

序文プロジェクト開発では、アイコンを使用する方法はたくさんあります。iconfont で適切なアイコ...

MySQLテーブルのテーブル構造を素早く変更する方法

MySQL テーブルのテーブル構造をすばやく変更する - 「MySQL 管理」から抜粋 ALTER ...

MySQL の簡単な分析 - MVCC

バージョンチェーンInnoDB エンジン テーブルでは、クラスター化インデックス レコードに 2 つ...

Windows 10 に付属する仮想マシンのネットワークを設定するための詳細な手順 (グラフィック チュートリアル)

1. サーバー ホストをクリックし、右側の操作リストで [仮想スイッチ管理] をクリックして、仮想...

MySQLのページング制限のパフォーマンス問題についての簡単な説明

MySQL ページング クエリは通常、制限を通じて実装されます。 limit は 1 つまたは 2 ...

デザイン理論:フォントデザインの基礎

<br />言葉は、人間の思考や感情を伝えるために必然的に生み出されるものです。人類の文...

MySQLの日付と時刻関数の使用の概要

この記事はMySQL 8.0に基づいていますこの記事では、日付と時刻の操作のための MySQL 関数...

Samba を使用して Linux サーバー上で共有ファイル サービスを構築する方法

最近、私たちの小さなチームは、サーバー上の共有フォルダーを共有して、全員がパブリックリソースドキュメ...

LinuxにRocketMQインスタンスをインストールする手順

1. JDKをインストールする1.1 現在の仮想マシン環境にJDKがあるかどうかを確認する rpm ...

MySQLにインデックスを追加しても効果がないいくつかの状況について簡単に説明します。

インデックスを追加すると、クエリの効率が向上します。インデックスを追加するということは、ドキュメント...

オンラインMySQL自動増分IDが使い果たされた場合の対処方法

目次テーブル定義の自動増分 ID InnoDBシステムはrow_idを自動的に増加させるシドInno...