HTTP |
---|
主要項目 |
リクエストメソッド |
ヘッダーフィールド |
ステータスコード |
認証方式 |
セキュリティホール |
HTTPリファラ(英: HTTP referer)あるいは単にリファラは、HTTPヘッダの1つで、インターネット上の1つのウェブページまたはリソースから見て、それにリンクしているウェブページやリソースのアドレス[1]を指す。リファラを参照することで、どこからそのページに要求が来たのかを知ることができる。リファラをログすることでウェブサイトやウェブサーバで訪問者がどこから来ているかを把握でき、プロモーションやセキュリティの目的に使うことができる。リファラの活用はクロスサイトリクエストフォージェリ対策としても一般的だが、リファラが無効化されているとそのようなセキュリティ機構は働かない。リファラは一般に統計的用途に使われている。
デリファラ[2]とは、要求を起こすべくクリックされたページを目標ウェブサイトが識別できなくするため、要求から元のページ(サイト)の詳細を除去する手段である。
あるページにあるリンクをクリックして別のウェブページを訪れるとき、リファラはそのリンクが置かれているウェブページのURLである。
より一般化すると、リファラはその要求を発生させる原因となったアイテムのURLである。例えば、或るウェブページ内に画像を表示するとき、リファラはそのHTMLページのURLとなる。ウェブブラウザからウェブサーバへのHTTP要求の仕様上、リファラフィールドはオプションである[3]。
ほとんどのウェブサーバには全トラフィックのログがあり、ブラウザが要求毎に送信したHTTPリファラを記録している。ウェブログ解析ソフトの多くはこの情報を処理できる。リファラ情報はユーザーのプライバシーに関わる場合があるため、リファラ情報を送信しないよう設定できるブラウザもある。プロキシやファイアウォールソフトウェアにもリファラ情報をフィルタで除去できるものもあり、外部に公開していないロケーション情報を漏らさないようにできる。このことは問題を発生する要因ともなる。Webサーバはサイトの一部について、正しいリファラを送ってこないブラウザに対してアクセスをブロックしていることがある。これはディープリンクを防いだり、画像の不正使用(直リンク)を防ぐためである。プロキシソフトウェアの中にはそのサイトのトップレベルのアドレスをリファラとして与えるものがあり、ユーザーが最後に訪問したサイトを暴露することなく問題を回避できる。
最近では一部のブログはリファラ情報を公表し、あるブログにリンクしているサイトにブログ側からもリンクすることで会話を広げようとしている[要出典][4]。これを悪用し、スパマーのサイトへのリンクを大量に貼らせるリファラスパムが登場している[4]。
アダルトサイトなどの有料サイトの多くはコンテンツを守る目的でリファラ情報を利用している[要出典]。すなわち、ログインしないと参照できないなどの極少数のページからのアクセスのみを許可するのである。これにより、協力関係にあるアダルトサイト間での素材の共有が容易になる。このようなサイトへのフリーなアクセスを実現する手段としてリファラスプーフィングがある。
ほとんどのウェブサーバには全トラフィックのログがあり、ブラウザが要求毎に送信したHTTPリファラを記録している。このため様々なプライバシーに関わる懸念が生じ、本当のリファラURLを送信しないようにするシステムがいくつも開発された。リファラヘッダを単に空白にするものや違うデータで置き換えるものがある。一般にセキュリティソフトにはリファラデータを空白にするものが多く、ウェブベースのサーバにはURLを偽物(一般にそのサーバ自身のURL)に置き換えるものが多い。当然ながら、これによってリファラスパムの問題が生じる。両者の技術的詳細はほぼ同じである。セキュリティソフトは一種のプロキシとして動作し、HTTP要求を書き換える。ウェブベースの手法ではサーバが別のウェブサイトをロードするため、リファラURLにはそのサーバのアドレスが送られる。ウェブブラウザには、ユーザーがオプションでリファラ情報送出の切り替えできるものもある[5]。
ウェブサイトがリファラ送信の有無を制御する仕組みとして、リファラーポリシーが実装されつつある[6][7]。
このほか、主要なブラウザでは、Refresh
HTTPヘッダを使うよう設定するとリファラヘッダを送らなくなる手法もある[8]。しかし、W3Cではウェブアクセシビリティの観点からRefreshの手法を推奨していない[9]。
本来、参照元という意味の英単語は「referrer」であるが、HTTPリファラの場合は意図的に「referer」と綴る場合がある。これは、HTTPが策定された時にヘッダ名を間違ったスペルで書いてしまい、それが今でも使われている、という歴史的経緯のためである。
前述の通り仕様上のヘッダ名は「referer」であるため、特にHTTPヘッダを直接扱うようなソフトウェアプログラムの場合、「referrer」と綴ると意図通りに動作しない場合すらある。
Network.http.sendRefererHeader
mozillaZine