🎉
PHPでリファラチェック
リファラチェックとは?
リファラをチェックすることです。では、リファラとはなんでしょう?
リファラとは、あるページから別のページに遷移したときの、元ページのことです。
このリンク元をチェックすることが、リファラチェックですね。
リファラの取得
リファラは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
stristr
セキュリティの検討
PHPの公式リファレンスによると、以下のように記載されています。
'HTTP_REFERER'
現在のページに遷移する前にユーザーエージェントが参照していた ページのアドレス(もしあれば)。これはユーザーエージェントに よってセットされます。全てのユーザーエージェントが これをセットしているわけではなく、また、HTTP_REFERER を変更する機能を持つものもあります。 要するに、信頼するべきものではありません。
つまり、HTTP_REFERERは書き換えることが可能なので、完璧なセキュリティチェックではありません。
セキュリティ向上の一助になるくらいに考えてください。
Discussion