使用内存缓存优化 WordPress 防止暴力破解密码功能

Memcached 内存缓存可以优化 WordPress 很多功能,让你的 WordPress 变得更快,接下来我们会通过一系列文章来讲解我是如何使用 Memcached 来深度优化 WordPress。

WordPress 没有防止暴力破解密码的功能

WordPress 的一个重大的安全隐患就是 WordPress 登录界面没有防止暴力破解的功能,就是用户可以不停的尝试错误,直到暴力破解,如果密码不够复杂,如果被使用软件扫描的话,那么很快就会被破解的。

现在市面上常用的方法是有一个叫做 Limit Login Attempts 的插件,他可以限制登陆次数,这个插件把登录尝试错误记录都存在 Options 里面,这样效率并不会太高。我们可以把失败的尝试记录存到 Memcached 里面,通过内存缓存去优化它。

使用内存缓存优化 WordPress 防止暴力破解密码

当用户登录失败的时候,以 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;
});

WPJAM 用户管理插件 已经集成该功能,直接启用即可。


WPJAM Basic 插件已经集成了 Memcached,下载 WPJAM Basic 之后,将 wpjam-basic/template/ 目录下的 object-cache.php 文件复制到 wp-content 目录下即可。


©我爱水煮鱼,本站推荐使用的主机:阿里云,国外主机建议使用BlueHost

本站长期承接 WordPress 优化建站业务,要求很高,有兴趣请联系微信:「chenduopapa」或微信公众号:「WordPress果酱」。

热门文章