今回の記事を読んで欲しい方
- URLを直接入力したらトップ画面などにリダイレクトさせる方法を知りたい方
- URLの直接入力で不正アクセスを防ぎたい方
今回はrefererを使った画面遷移の制限について書いていこうと思います。
まずリファラとは?
ユーザがサイトに流入する時に利用したリンク元の情報を指します。
どのサイトからアクセスしてきたか?どのURLからアクセスしたかがわかる情報です。
リファラの取得方法
スーパーグローバル変数である$_SERVERを使用します。
因みに余談ですが、$_GETや$_POSTもスーパーグローバル変数です。
$_SERVER['HTTP_REFERER'];
この書き方で直前にアクセスしてきたURLを取得できます。
ただ、必ず取得できることが保証されているわけではなく、https://...のサイトからhttp://...のサイトへアクセスしてきたときはリファラは設定されません。お気をつけください。
リファラでURLを強制的に画面遷移させる方法
次に、先程のリファラ を使用して強制的にトップ画面などに遷移させる方法をお伝えします。
処理を読み込ませたくもない方はファイルの一番上に記載しましょう。
$referer = $_SERVER['HTTP_REFERER']; // 直前にアクセスしてきたURL
$url = '画面遷移させたいURL';
if(!strstr($referer,$url)){ // 直前にアクセスしてきたURLと変数$urlの中身が一緒ではなかったら
header('Location: index.php'); // index.phpのページに遷移させます
exit; // header関数を使用した直後に記載しないとページの下まで処理をし終えてから画面遷移します。忘れず絶対に書きましょう。
}
コメントを含めて見づらくて申し訳ないですが、この書き方でURLを比較して意図しないURLからの画面遷移であれば防げます。
header関数に関しては別の記事でも書いてますので参考にしてみてください。
リファラが存在しない場合の考慮
念のため、リファラ が存在しない場合の考慮として処理に追加してもいいかもしれません。
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;
リファラ が設定されている場合は取得、リファラが存在しない場合にnull値になります。
あとはif文で$refererが入っていなかった場合の処理を追加すればOKです。
今回のまとめ
リファラ
・どのサイトからアクセスしてきたか?どのURLからアクセスしたかがわかる情報
直前にアクセスしてきたURLの取得方法
$_SERVER['HTTP_REFERER'];
強制的に画面遷移をさせる方法
$url = '画面遷移させたいURL';
if(!strstr($referer,$url)){header('Location:遷移させたいURL');exit;}
リファラが設定されている場合は取得、リファラが存在しない場合にnullに設定
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;
自分もまだまだ未熟なので、知識が深まったら追記していきます。