リファラーとは?
この記事の動画版はこちら(画像クリックでYoutubeに飛びます)
リファラーとは?
結論から先に言うと
リファラーというのは「直前に見ていたページのURL」のことです。
Webページは、あるページのリンクやボタンが押されて、次のページが表示されるという流れになっていますが、その「リンク元のページ」のことですね。
リファラーを分析することで、どこからアクセスしてきたのか?といった「アクセス解析」に利用できたり、正常なアクセス元からアクセスしてきているのか?といった「セキュリティ対策」に利用できたりします。
リファラーの仕組み
リファラーは、ブラウザから送られる「ヘッダー情報」に記載されています。
ブラウザからサーバーに対してWebページをリクエストする際、HTTPヘッダーという情報の中に色々なデータを記載して送信しています。
例えば、使っているブラウザの種類やOSの情報、以前そのサイトにアクセスした際に保存したCookie情報。これは自動ログインなどにも使われている情報ですね。
そして、リファラーもここに記載されています。
つまり、ブラウザからサーバーに対して、これらの情報を教えているという訳ですね。
アクセス解析ツールなどは、この情報を元に、サイトに訪問したユーザーの使用デバイスや、流入元などを分析しています。
PHPではどのように取得する?
リファラーの情報は、Webサーバーのログファイルにも記録されますが、サーバー側のプログラムで取得することもできます。
例えば、PHPの場合は、このように「$_SERVER」というスーパーグローバル変数に「HTTP_REFERER」と指定すると取得することができます。
リファラーの情報を元に、プログラム側で制御を行うこともできるということですね。
リファラーの利用と注意点
リファラーの情報を取得することで、アクセス元に応じて、プログラム側で処理内容や表示するページを切り替えたり、特定のアクセス元からしか処理を受け付けないように制限したり、といったことが行えます。
例えば、フォームの送信を受け付けるプログラムでは、対象となるフォーム画面のURLからしかリクエストを受け付けないようにするといった感じですね。
ただし、リファラーはブラウザやセキュリティソフトによって無効化されていたり、ユーザー側で改ざんすることも比較的簡単にできてしまいます。
また、リファラーが送信されるのは、あくまでページからの遷移の場合だけであり、お気に入りやメール、QRコードなどから直接ページにアクセスした場合や、httpsのページからhttpのページに遷移した場合には記録されません。
そのため、処理の重要な部分にリファラーの情報を使用したり、リファラーの情報だけでセキュリティ対策をかけるのではなく、あくまで補助的な役割として使うようにしましょう。
先程のフォームの例では、リファラーだけでセキュリティ対策を行うのではなく、セッションを使ったCSRF対策を併用するのが安全です。
ちなみに、講座ではこの辺りのセキュリティ対策を実験しながら学んでいきますので、興味があれば、ぜひカリキュラムをチェックしてみてください。
リファラーによる情報漏洩
また、リファラーの仕組みによって情報漏洩につながってしまうこともあるので注意しましょう。
例えば、このようにURLの末尾にパラメーターとして重要な情報を付けている場合、
このページ自体はログインをしていないと見れないページだったとしても、ユーザーがこのページを見た後に、全く別のWebサイトにアクセスすると、そちら側のサーバーにこのURLがリファラーとして伝えられてしまう可能性があります。
そのため、URLパラメータには極力、機密情報を載せないこと。
そして、ID等が万が一外部に漏れたとしても、それだけでは情報を見ることができないように、表示側プログラムも考慮しておくこと。
こういったことを、普段の開発から心掛けるようにしましょう!
まとめ
・リファラーとは「直前に見ていたページのURL」のこと
・HTTPヘッダーに記載されている
・リファラーが送信されないこともあるため補助的に利用すること
・リファラーによって機密情報が漏洩しないよう注意しよう