欢迎光临
我们一直在努力

如何构建安全的 WordPress 3:限制登录次数,防止暴力破解

如何防止 WordPress 被暴力破解

现在大部分用户防止 WordPress 用户密码被暴力破解方法是使用一个叫做 Limit Login Attempts 的插件,该插件可以限制登录次数,账号被错误登录次数上了上限之后,用户名或者 IP 就会被限制。

但是 Limit Login Attempts 这个插件把登录尝试错误记录都存在 Options(选项)里面,这样的处理并不是最佳选择,首先可能效率可能会存在一些问题,另外也会填充太多的数据到 Options 表中。

如果服务器安装了 Memcached 的话,我们可以把失败的尝试记录存到 Memcached 里面,这样就可以通过内存缓存去优化登录次数限制功能。

使用 Memcached 限制登录次数

当用户登录失败的时候,以 IP 作为 key,失败登录次数 +1 作为值,存到内存里面。

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 );

再次登录的时候,我们检测一下访问者对应的 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 );

登录失败打到上限次数之后的界面如下图所示:

640

最后附上一点小功能,登录多次失败报错的时候登录框也支持摇头的功能。

add_filter('shake_error_codes'function ($error_codes){	$error_codes[]	= 'too_many_retries';	return $error_codes;});

最后还是那句话,任何站点,安全是最重要的,攻击者可以说无所不在,如果用户名被攻击者获知了,一定要限制登录次数,防止暴力破解。

WPJAM 用户管理插件 已经集上面所有的功能和相关代码,直接启用即可,点击查看 WPJAM 用户管理插件的详细介绍,Modular 主题也集成了。

我会在介绍 WordPress 安全这系列文章的时候,将这些安全相关代码也整合到 Modular 主题中,争取打造最安全的 WordPress 企业主题。

赞(0)
未经允许不得转载:WP之家 » 如何构建安全的 WordPress 3:限制登录次数,防止暴力破解

登录

找回密码

注册