1

私の Web サイトには$_SERVER['REMOTE_ADDR']、フォームを送信するユーザーの IP アドレスを含めるために使用する基本的なアプリケーション フォームがあります。

フォーム プロセッサ スクリプトで以下を使用しています。

// Create database object and connect to database.
$db = new Database($db_host, $db_username, $db_password, $db_name);
$db->connect();

// Collect POST data
$merchant_data['ip_address'] = $_SERVER['REMOTE_ADDR'];
$merchant_data['first_name'] = isset($_POST['first_name']) ? $_POST['first_name'] : '';
$merchant_data['last_name'] = isset($_POST['last_name']) ? $_POST['last_name'] : '';
$merchant_data['email_address'] = isset($_POST['email']) ? $_POST['email'] : '';
$merchant_data['phone_number'] = isset($_POST['phone']) ? $_POST['phone'] : '';
$merchant_data['customer_notes'] = isset($_POST['comments']) ? $_POST['comments'] : '';
$merchant_data['plan_name'] = isset($_POST['plan_name']) ? $_POST['plan_name'] : '';
$merchant_data['estimated_monthly_volume'] = $_SESSION['estimated_monthly_volume']; 
$merchant_data['interested_in'] = isset($_POST['interested_in']) ? $_POST['interested_in'] : '';
$merchant_data['additional_equipment_interest'] = isset($_POST['additional_equipment_interest']) ? serialize($_POST['additional_equipment_interest']) : '';
$additional_equipment_interest = isset($_POST['additional_equipment_interest']) ? $_POST['additional_equipment_interest'] : array();
$merchant_data['website_id'] = 1;

// Add new record in database.
$merchant_app_record_id = $db->query_insert('merchant_account_applications',$merchant_data);

// Close database connection
$db->close();

最近、誰かからこのフォームへのスパム ヒットがいくつか寄せられていますが、どういうわけか、このユーザーの IP アドレスがシステムに記録されていません。

ただし、通過する他のすべてのユーザーは、ログに記録された IP アドレスで終了します。

私のサイトが IP アドレスを取得できないようにするために、この人は何をしているでしょうか? 彼らの IP を禁止したいのですが、取得できません。

IP を取得する方法や、特定のユーザーを禁止する別の方法に関する情報をいただければ幸いです。

4

2 に答える 2

2

これを使用してください: https://gist.github.com/cballou/2201933

これは私のブログサイトで機能します。$_SERVER['REMOTE_ADDR'] がこの問題を処理できない理由はわかりませんが、github のスニペットは非常にうまく機能します。

于 2014-12-15T05:24:44.130 に答える
1

これは、ユーザーがプロキシ (自分で設定した) を使用しているときに発生しました。IP アドレスの代わりに、「neil@mars」のようなものを取得していました。これは、彼がプロキシで構成したためです。

に加えて

$_SERVER['REMOTE_ADDR']

あなたが試すことができます

getenv('HTTP_X_FORWARDED_FOR')
getenv('HTTP_CLIENT_IP')
于 2012-12-28T18:47:05.333 に答える