WordPress 是目前世界上最受欢迎的开源建站系统,这也代表着想打 WordPress 系统主意的人也很多,如果你也使用 WordPress, 而且你允许用户访问你的登录页(wp-login.php),那你肯定也经常在网站访问日志中看到有很多恶意登录的记录,都是使用一些常用的用户名和密码 字典进行反复尝试登录,虽然一般都不会破解到帐号密码,但是这样的扫描也浪费了不少服务器资源。
因为 WordPress 的系统结构的原因,黑客很容易就能获取到管理员(也就是第一个用户)的用户名,然后使用这个用户名进行暴力破解。但是如果我们拒绝这个用户名的登录动作,那无论破解工具跑多久都不会有结果。
解决思路
通过判断注册和登录 POST 数据中的用户名决定是否允许执行注册或登录动作。
注册判断使用 register_post 动作,登录判断使用 wp_authenticate 动作。
实现代码
// WordPress 添加注册和登录用户名黑名单
function wj_check_authentication($username){
//用 | 分割用户名,且 | 前后不留空格
$black_list = 'admin|administrator|guest|root|test|tester';
if( !empty($black_list) ){
$black_list = explode('|', $black_list);
if( in_array($username, $black_list) ){
wp_die( 该用户名已被系统保留,不能用于注册或登录!', '', array( 'back_link'=>true ) );
}
}
}
add_action ('wp_authenticate' , 'wj_check_authentication');
add_action ('register_post' , 'wj_check_authentication');
以上的代码拒绝了 admin、administrator、guest、root、test、tester 这几个用户名的注册和登录动作
场景一
如果你只想拒绝登录,你可以把这行删除:
add_action ('register_post' , 'wj_check_authentication');
场景二
如果你只想拒绝注册,你可以把拒绝登录这行删除:
add_action ('wp_authenticate' , 'wj_check_authentication');
如果你想要注册黑名单和登录黑名单不一样,你可以分别调用两个不同函数。但是请注意:在这个名单里的用户名都不能注册或登录,包括管理员(假如管理员用户名也在里面的话)。
建议给 WordPress 添加邮箱登录功能,然后把管理员用户名也加入黑名单,然后使用管理员邮箱登录,这样做的话,那些使用获取到的管理员用户名进行暴力破解的就全都被拒绝登录动作了。
本页面最后更新于:2022-11-07,距今已 926 天,若有链接失效或教程无效,欢迎留言反馈。
- 本文标题:美好的明天 - WordPress 添加注册和登录用户名黑名单
- 本文地址:https://www.wmviv.com/archives/554.html
- 转载请保留本文标题、本文地址及链接
- 本站遵循 知识共享《署名—非商业性使用—相同方式共享 4.0 协议国际版》(CC BY-NC-SA 4.0)公共许可协议
- 部分文章来源于网络,仅作为学习展示之用,版权归原作者所有,若侵犯您的权益,请您 来信告知。
抢沙发!