初めに
私は仕事でWordPressを使用したホームページを作るのですが、最近AIや自動化を使ってホームページにお問い合わせが増えてきました。
内容を確認するとお問い合わせフォームに入力するのでは無く、直接送信APIに問い合わせを送っています。IPアドレスを確認すると外国のサーバーが多く、専用のサーバを設置しているのか?踏み台にされているのかは定かではありません。
メールの内容も、本当の営業メールや怪しいLPへのお誘い、英文など様々です。
この状態はあまり良い事ではないと思っていないので情報の把握と除去するIPリストを作成するスクリプトを作成したので公開します。
コード
まず、下記コードを参考に設置してください。
但し、直接のアクセスは好ましくないのでフォルダ内への設置とアクセス制限をかける事をお勧めします。
※コードはWEB Rootへの設置を前提に記述しているので、必要な個所は訂正してください。
date_default_timezone_set('Asia/Tokyo');
$msg = "------------------------------------------------------------"."\n";
$msg .= date("Y/m/d H:i:s")."\n";
$msg .= "HTTP_USER_AGENT:".$_SERVER["HTTP_USER_AGENT"]."\n";
$msg .= "REMOTE_ADDR:".$_SERVER["REMOTE_ADDR"]."\n";
$msg .= "REMOTE_HOSTNAME:".gethostbyaddr($_SERVER["REMOTE_ADDR"])."\n";
$msg .= "HTTP_REFERER:".$_SERVER["HTTP_REFERER"]."\n";
$msg .= "HTTP_X_REQUESTED_WITH:".$_SERVER["HTTP_X_REQUESTED_WITH"]."\n";
$msg .= "SCRIPT_FILENAME:".$_SERVER['SCRIPT_FILENAME']."\n";
$msg .= "REQUEST_METHOD:".$_SERVER["REQUEST_METHOD"]."\n";
$msg .= "REQUEST_URI:".$_SERVER["REQUEST_URI"]."\n";
$msg .= "SCRIPT_NAME:".$_SERVER["SCRIPT_NAME"]."\n";
$msg .= "QUERY_STRING:".$_SERVER["QUERY_STRING"]."\n";
$msg .= "PHP_SELF:".$_SERVER["PHP_SELF"]."\n";
$msg .= "_GET:".count($_GET)."\n";
foreach( $_GET as $k => $v ) {
$msg .= $k.":".$v."\n";
}
$msg .= "_POST:".count($_POST)."\n";
foreach( $_POST as $k => $v ) {
$msg .= $k.":".$v."\n";
}
$msg .= "_COOKIE:".count($_COOKIE)."\n";
foreach( $_COOKIE as $k => $v ) {
$msg .= $k.":".$v."\n";
}
$log = true;
if( $_SERVER["REMOTE_ADDR"] == 'xxx.xxx.xxx.xx' ) { /*出力したくないIP*/
$check = false;
}
if( $log ) {
//アクセスログを出力します。/以外に出力する場合は修正してください。
$fnm = ABSPATH."./log_".date("Ymd").".txt";
$h = fopen( $fnm, "a" );
fwrite( $h, $msg );
fclose( $h );
}
//
if( $_POST['_wpcf7'] >= 0 && $_POST['check-robot'] == '1' ) {
//怪しいIPアドレスを出力します。/以外に出力する場合は修正してください。
$fnm = ABSPATH."./denyip.txt";
if( !file_exists( $fnm ) ) {
$h = fopen( $fnm, "a" );
fclose( $h );
}
$ip = $_SERVER["REMOTE_ADDR"];
$content = file_get_contents( $fnm );
if( !strpos( $content, $ip ) ) {
$h = fopen( $fnm, "a" );
fwrite( $h, "deny from ".$ip."\n" );
fclose( $h );
}
}
アクセス時に上記コードを実行する為に、WordPressへ組み込みます。バージョンアップとかに影響しないようにしてください。今回はwp-config.phpへ組み込むようにしました。
require_once ABSPATH . "./spamcheck.php";
お問い合わせフォームにも下記の記述が必要です。
通常はチェックを付けて送信しましが、この場合はチェックを外して送信するようにしてください。
[acceptance check-robot default:on invert] チェックを外して送信します。 [/acceptance]
アクセスがあるとdenyip.txtにapacheのアクセス拒否の記述で出力されます。
内容を確認し、.htaccessに追記すると該当するIPからブロックする事ができます。
最後に
個人的な意見で言えば、営業をかける事は普通の事なので悪い事ではないと思っています。しかし、人が探して入力するのではなく、ロボットで自動的に営業をかけようと考える事がどうかと思います。
効率が求められます事もありますが、営業は人と人との関係を築きながら行うべきだと。