🎉

PHPでリファラチェック

2022/05/20に公開

リファラチェックとは?

リファラをチェックすることです。では、リファラとはなんでしょう?
リファラとは、あるページから別のページに遷移したときの、元ページのことです。
このリンク元をチェックすることが、リファラチェックですね。

リファラの取得

リファラはPHPのスーパーグローバル関数の$_SERVERの中に格納されています。
以下のように$_SERVERから取得することができます。

$_SERVER['HTTP_REFERER']

リファラチェックのやり方

$referer = $_SERVER['HTTP_REFERER'];
$url = 'sample.com';
$referer_url = parse_url($referer)['host'];

if (stristr($referer_url, $url)) {
  echo '正常なアクセスです';
} else {
  //エラー処理
  echo '異常なアクセスです';
}

コードの解説

元ページのリファラを取得してhostを抜き出して、正常な場合のアクセス元のURLと比較しています。

$_SERVER['HTTP_REFERER']

HTTP_REFERERを指定することでユーザーのアクセス元のアドレスを取得します。

parse_url

parse_url 公式リファレンス

stristr

stristr 公式リファレンス

セキュリティの検討

PHPの公式リファレンスによると、以下のように記載されています。

'HTTP_REFERER'
現在のページに遷移する前にユーザーエージェントが参照していた ページのアドレス(もしあれば)。これはユーザーエージェントに よってセットされます。全てのユーザーエージェントが これをセットしているわけではなく、また、HTTP_REFERER を変更する機能を持つものもあります。 要するに、信頼するべきものではありません。

つまり、HTTP_REFERERは書き換えることが可能なので、完璧なセキュリティチェックではありません。
セキュリティ向上の一助になるくらいに考えてください。

Discussion