租号玩代理申请
A- A+

WordPress限制后台无限尝试密码登录,设置15分钟内最多允许3次错误。

2026年07月09日 建站相关 暂无评论 阅读 7 次 打印

今天晚上再次查看后台网站日志时,发现还是很多人扫描工具在无限的尝试登录本站,所以要限制一下。

有Nginx和代码限制,自己看看需要选择哪种都可以,配合我上一篇文章的安全策略更好:
WordPress 网站安全加固 包含代码加固和Nginx加固 与 Podman 隔离部署

方法一:安装插件Limit Login Attempts Reloaded(轻量化专用),来限制爆破后台。

方法二:无插件代码(functions.php 轻量限制)

// 限制登录失败次数
function wp_limit_login_attempts($user) {
    $ip = $_SERVER['REMOTE_ADDR'];
    $transient_key = 'login_fail_' . md5($ip);
    $fail_times = get_transient($transient_key);

    // 达到5次直接拦截
    if ($fail_times >= 5) {
        return new WP_Error('locked', '登录失败次数过多,请15分钟后重试');
    }
    // 登录错误则计数+1
    if (is_wp_error($user)) {
        set_transient($transient_key, $fail_times + 1, 15 * 60);
    }
    return $user;
}
add_filter('authenticate', 'wp_limit_login_attempts', 99);

更狠一点的直接返回404就行了,推荐这个

function wp_limit_login_attempts($user) {
    $ip = $_SERVER['REMOTE_ADDR'];
    $transient_key = 'login_fail_' . md5($ip);
    $fail_times = (int)get_transient($transient_key);

    // 达到5次,直接输出404并退出
    if ($fail_times >= 5) {
        status_header(404);
        nocache_headers();
        exit;
    }

    // 登录错误则计数+1,锁定15分钟
    if (is_wp_error($user)) {
        set_transient($transient_key, $fail_times + 1, 15 * 60);
    }
    return $user;
}
add_filter('authenticate', 'wp_limit_login_attempts', 99);

方案三:服务器层拦截(Nginx/Apache,最彻底)
这一段找到宝塔,站点,设置,配置文件修改,放入到server{}里面就行了

# 限制wp-login.php访问频率
location ~* ^/wp-login\.php$ {
    limit_req zone=wp_login burst=5 nodelay;
    fastcgi_pass 127.0.0.1:9074;
    fastcgi_index index.php;
    include fastcgi_params;
}

这一段找到应用商店,nginx,配置文件,找到http{},放到这个大括号里就了。

# 新增:wp-login 每分钟最多3次请求限流
limit_req_zone $binary_remote_addr zone=wp_login:10m rate=1r/m;

NGINX拦截

这样就可以了,这里我比较推荐Nginx拦截,同时大家一定要设置16位以上大写字母小写字母数字符号的混合后台登录密码。

给我留言

6 - 1 =
评论规范提醒