阻止机器人恶意注册网站账号

秦半两更新于 2025年 4月 11日

起因:这几天,网站一直被机器人恶意注册,每天都会有10多条下图中这样的虚假账号。

恶意注册马甲
恶意注册的马甲

目前我找到了两种方法:方法一是手动屏蔽模式,方法二是自动屏蔽模式。假如你遇上的是无明显特征的spam用户注册,请采用方法一;要是遇到有明显特征的spam用户注册(比如用户名全部包含telegram, blogspot等单词),请采用方法二。

方法一:IP检测+Cloudflare防火墙屏蔽

找出机器人IP地址

一开始我不在意,删掉就是了。可是这玩意每天不间断,这就烦到我了。虽然这个网站装着Wordfence插件,但是依然没防住这个机器人。于是我想到一个解决方法:找到机器人的IP,禁掉这个IP访问权限。

首先,到插件市场下载一个名为 Register IPs 的免费插件。它能够检测出注册人的IP地址。

注册人IP检测插件
注册人IP检测插件

启用插件后无需任何操作,回到user界面会多出来IP地址列:

出现IP地址列
出现IP地址列

依次查了这些IP,发现均来自俄罗斯和乌克兰。

这下好办了,把这两个国家屏蔽掉就是了,反正完全不是我的目标市场。

接下来需要用到的是Cloudflare的防火墙功能。其实wordfence和all in one security插件都有国家屏蔽功能,但是收费的,那有免费的我们自然用免费的咯。

使用Cloudflare防火墙屏蔽

Cloudflare免费提供了5条WAF规则,我们只要创建一条基于国家的屏蔽规则即可。

新建Cloudflare防火墙规则
新建Cloudflare防火墙规则

规则的字段选择 国家/地区 ,运算符选择 包含以下各项 , 值选择需要屏蔽的国家,选择操作选择 阻止 。最后点击 部署 就完成了。

规则明细
防火墙规则明细

当然,我们也可以用这个方法屏蔽国内IP。但是作为一名合格的spyer,哪会用国内IP去访问… 所以针对国内同行我们还可以使用屏蔽中文浏览器、屏蔽中文操作系统、屏蔽东八区等方法。

方法二:代码屏蔽

假如你的服务器是Apache,那可以使用以下代码。代码由chatgpt生成,经验证有效。

请将这段php代码复制到你的wordpress子主题或snippet插件中。并替换全部的“blogspot”字样和“telegram”为你需要屏蔽的用户名字符(同时有多少个屏蔽字符,就增加几个 strpos( $sanitized_user_login, ‘屏蔽字符’ ) !== false )。

PHP
// 检查注册名并禁止特定IP
function block_spam_registrations_and_ip( $errors, $sanitized_user_login, $user_email ) {
    if ( strpos( $sanitized_user_login, 'blogspot' ) !== false 
      || strpos( $sanitized_user_login, 'telegram' ) !== false ) {
        $errors->add( 'username_error', '<strong>ERROR</strong>: Forbidden.' );

        // 获取用户IP地址
        $user_ip = $_SERVER['REMOTE_ADDR'];
        
        // 将IP地址添加到.htaccess文件中以禁止访问
        block_ip_in_htaccess( $user_ip );
    }

    return $errors;
}

add_filter( 'registration_errors', 'block_spam_registrations_and_ip', 10, 3 );

// 将IP添加到.htaccess以禁止访问
function block_ip_in_htaccess( $ip ) {
    $path = ABSPATH . '.htaccess';
    if ( file_exists( $path ) && is_writable( $path ) ) {
        $lines = [
            "\n# Block IP because of spam registration",
            "Deny from {$ip}",
        ];
        
        // 在.htaccess文件末尾追加内容
        file_put_contents( $path, implode( "\n", $lines ), FILE_APPEND );
    }
}

这段代码的原理是这样的:检测用户名中包含你所指定的特定字符的spam机器人的ip,并将这个ip加到.htaccess中以阻止来自这个ip地址的访问。

你可以稍后到.htaccess文件中查看是否已自动增加 “#Block IP because of spam registration Deny from xx.xx.xx.xx ”进行验证。

无论采用哪种方法,亲测,屏蔽马上生效,后面几天总算消停了。

这篇文章对你有帮助吗?
[ 评价次数: 0 ; 满意度: 0/5 ]

欢迎留言