A-
A+
WordPress限制后台无限尝试密码登录,设置15分钟内最多允许3次错误。
今天晚上再次查看后台网站日志时,发现还是很多人扫描工具在无限的尝试登录本站,所以要限制一下。
有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拦截,同时大家一定要设置16位以上大写字母小写字母数字符号的混合后台登录密码。

