問題
フォームの送信時、リファラーチェックを行うには?
解決策
フォームの送信先のphpファイル内にて、「$_SERVER['HTTP_REFERER']」でリファラーを取得し、特定のドメインの場合のみ、送信処理を行う。
フォームのセキュリティをアップする手法
スパム対策として、フォームの送信がどのURLから行われたか(リファラー)をチェックし、見知らぬURLからの送信は除外する手法があります。
今回はフォームのリファラーチェックを行い、特定のドメインのURL以外は除外する方法をご紹介します。
フォームの送信のあったURL(リファラー)を取得する
「$_SERVER[‘HTTP_REFERER’]」で直前のURL(リファラー)を取得できます。
これをフォームの送信先のPHPファイル内で取得します。
$host = $_SERVER['HTTP_REFERER'];
取得した送信元URLを連想配列に変換
先ほど取得した送信元URLを連想配列に変換します。
「parse_url」を実行することで、「host(ホスト名)」や「path(パス)」等の情報ごとに区分けされて連想配列として返してくれます。
$str02 = parse_url($host);
ホスト名が特定のものと合っているかどうか
先ほど取得した連想配列の中のホスト名が特定のものと合っているかどうかを判定します。
判定には「stristr」を使用します。「stristr」はある文字列を対象に、特定の文字列が含まれているかどうかを判定してくれます。
合っていれば、送信後の処理を行います。
if(stristr($str02['host'], "特定のドメイン(keylopment.com 等)")){
// 送信後の処理を実行
}
記述例
実際に使用する記述例は以下になります。
$host = $_SERVER['HTTP_REFERER'];
$str02 = parse_url($host);
if(stristr($str02['host'], "特定のドメイン(keylopment.com 等)")){
// 送信後の処理を実行
}
参照
【PHP関数 – URLの構成要素を連想配列に – parse_url() – PHP入門 – Webkaru】
https://webkaru.net/php/function-parse-url/
【PHPで文字列の中から特定文字を探す(strstr, stristr関数)】
https://www.tailtension.com/php/1004/
コメント