广告
侠客剑影
进入小游戏
进入小游戏
当用户登录失败的时候,以 IP 作为 key,失败登录次数 +1 作为值,存到内存里面。
add_action('wp_login_failed', function($username){
$key = wpjam_get_ip();
$times = wp_cache_get($key, 'wpjam_login_limit');
$times = $times ?: 0;
wp_cache_set($key, $times+1, 'wpjam_login_limit', MINUTE_IN_SECONDS*15);
});
再次登录的时候,我们检测一下访问者对应的 IP 的失败次数,如果是大于 5 次,就直接报错不能访问了。
add_filter('authenticate', function($user, $username, $password){
$key = wpjam_get_ip();
$times = wp_cache_get($key, 'wpjam_login_limit');
$times = $times ?: 0;
if($times > 5){
remove_filter('authenticate', 'wp_authenticate_username_password', 20, 3);
remove_filter('authenticate', 'wp_authenticate_email_password', 20, 3);
return new WP_Error('too_many_retries', '你已尝试多次失败登录,请15分钟后重试!');
}
return $user;
}, 1, 3 );
登录失败之后的界面如下图所示:
最后附上一点小功能,登录多次失败报错的时候登录框也支持摇头的功能。
add_filter('shake_error_codes', function ($error_codes) {
$error_codes[] = 'too_many_retries';
return $error_codes;
});
安全是最重要的,防止用户名暴露是 WordPress 最重要的一步,所以一定要重视。
WPJAM 用户管理插件已经集成了使用内存缓存优化登录次数限制功能,直接启用即可,点击阅读原文查看 WPJAM 用户管理插件的详细介绍。
评论已关闭