PHPでリファラのURLを取得する:$_SERVER['HTTP_REFERER']

リファラ(referer)はあるページを開いたユーザーが、どのページから流入してきたかを知るための情報です。あるページへのリンク元のページと言うこともできます。 今回は、PHPでリファラを取得する方法を説明します。

$_SERVER変数からリファラを取得する

サイト閲覧者のリファラは、PHPのスーパーグローバル変数$_SERVER['HTTP_REFERER']にあります。 以下では、parse_url関数を使ってリファラからドメイン名のみを取得するサンプルコードを紹介します。parse_url関数は、URL構成要素を分解して連想配列にして返す関数 サンプルコード
$referer = $_SERVER['HTTP_REFERER'];
$url = parse_url($referer);
$host = $url['host'];

echo $host;
parse_url関数は、URLが正しいかどうかのチェックはされないので注意してください。

リファラのセキュリティ対策への利用と注意点

リファラはセキュリティ対策に利用可能です。この場合は個人情報やパスワードを送信するフォームが、サイト内にある本物のフォームであることを確かめるための送信元URLとして、リファラを使うことができます。 もしリファラが不明なURLだった場合は、第三者サイトからの偽の情報送信と見なせます。

個人情報の漏洩となる可能性も

ユーザー情報の中で、リファラはサイト外の情報を持つ特殊なものです。そのため、URLのパラメーター($_GETで入手可能な情報)に個人情報を含めると、リファラから個人情報が漏えいしてしまう可能性があります。 そのため、リファラやパラメータの扱いには十分気をつけてください。

リファラが取得できない場合

また、リファラは確実に取得できるものではないことにも注意してください。 例えば、セキュリティ対策がされたHTTPSサイトからHTTPサイトへのリンクは、リファラを取得することができません。また、リダイレクトが挟まれていたり、アプリからのリンクの場合はリファラを正常に取得できないことがあります。 そのため、リファラがあることを前提としたプラグラムは、不具合の原因となる可能性があるので気をつけてください。

イベント