0

登録スクリプトにアカウント スパム セキュリティを追加しています。

目的は、データベース内の 10 個を超えるアカウントが IP アドレスと一致し、これらの 10 個のアカウントが過去 1 時間に作成された場合に、スクリプトがユーザーによる新しいアカウントの作成を拒否することです。

これにより、たとえば、図書館内の人々が自分のアカウントを作成できるようになると同時に、人々が私たちのデータベースでアカウントをスパム送信するのを防ぐこともできます.

次のコードがありますが、過去 1 時間に 10 個以上のアカウントが作成されたかどうかを確認するにはどうすればよいですか?

if($count_existscheck==1) {
    echo 'account already exists.';
    exit();
}
if($count_existscheck==0) {
    // begin check for IPs
    $ip = $_SERVER['REMOTE_ADDR'];
    $sql_ipcheck = "SELECT * FROM members WHERE ip='$ip'";
    $result_ipcheck = mysql_query($sql_ipcheck);
    $count_ipcheck = mysql_num_rows($result_ipcheck);

    // if count =10 or >10, check if they were in the last hour
    if($count_ipcheck>9) {
        $row_ipcheck = mysql_fetch_assoc($result_ipcheck);
    }
}
4

1 に答える 1

1

これを試して:

$onehourbefore = strtotime('-1 hour');
$sql_ipcheck = "SELECT * FROM members 
         WHERE ip = '$ip' AND lastregistration > $onehourbefore;
$result_ipcheck = mysql_query($sql_ipcheck);

if(mysql_num_rows($result_ipcheck)>=10) echo 'Access Denied';

メンバー テーブルに「lastregistration」という名前の列が必要です。ここに登録時刻を Unix タイムスタンプで保存します。

(そして、mysql サーバーの時刻と Web サーバーの時刻を確認する必要があります。また、mysql_query() ではなく mysqli_query() を使用する必要があります ... )

于 2013-05-14T00:46:09.287 に答える