使用wordpress建站的很多,但是大家都知道默认后台登录地址是公开的,登录无需验证码。这样就会遇到一个问题。就是不停的登陆后台管理员账号密码,如果密码强度不够,使用工具爆破相信也是时间长短问题。我自己就被爆破了,后台设置了邮件登陆提示,直接被刷屏。每次登陆ip还不一样,很是头疼。有考虑过购买防火墙。最后价格感觉太贵就没入手。好在看到不少站长都有遇到这类问题。就整合了一下方法
[wm_blue]壹:wordpress后台登陆地址修改方法之主题函数代码法。打开主题下的functions.php文件添加[/wm_blue]
//保护后台登录
function login_protection(){
if($_GET['word'] != 'fuck')header('Location: https://www.xxxx.com/');//改为自己域名
}
add_action('login_enqueue_scripts','login_protection');
这样打开 http://xxxx.com/wp-login.php?word=fuck,才会打开登录页,否则就会自动跳转到首页。
但是,当我改好后消停了一会后,又开始爆破了。邮箱里依旧收到很多登录失败的提醒邮件。但相比改之前好了一些。于是就差了下相关问题,原来早有前辈探过路了。那么就跟着脚印走,采取了一个更加简单粗暴的方法
[wm_blue]贰:修改wp-login.php文件名。[/wm_blue]
于是将wp-login.php修改成了fuck-login.php,同时还要打开这个文件,将里面所有的wp-login.php替换成fuck-login.php。这样登录地址便成了http://xxxx.com/fuck-login.php跟前面那个方法结合起来,就成了http://xxxx.com/fuck-login.php?word=fuck
同时,还看到有另一种方法,那就三管齐下,趁热打铁。
[wm_blue]叁:根据ip限制用户登录的次数[/wm_blue]
# 阻止登录的函数,直接 404
function block_login() {
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
exit;
}
# 登录前判断登陆的失败次数
add_action("login_head",function () {
$login_ip = $_SERVER['REMOTE_ADDR'];
$login_ip_list = unserialize(get_option("LOGIN_IP_LIST"));
# 登录失败超过5次就进行阻止登陆
if($login_ip_list && ($login_ip_list[$login_ip] > 5)) {
block_login();
}
});
# 登录失败的处理
add_action('login_errors', function ($info) {
$login_ip = $_SERVER['REMOTE_ADDR'];
$login_ip_list = get_option("LOGIN_IP_LIST");
if($login_ip_list) {
$login_ip_list = unserialize($login_ip_list);
} else {
$login_ip_list = array();
}
# 登录次数 + 1
$login_ip_list[$login_ip] += 1;
update_option('LOGIN_IP_LIST', serialize($login_ip_list));
# 提示登录失败的次数
return "$login_ip 登陆次数 " . $login_ip_list[$login_ip];
});
# 证明已经登录成功了
add_action("admin_menu", function () {
$login_ip = $_SERVER['REMOTE_ADDR'];
$login_ip_list = unserialize(get_option("LOGIN_IP_LIST"));
$login_ip_list[$login_ip] = 0;
update_option('LOGIN_IP_LIST', serialize($login_ip_list));
});
可根据自己适当情况修改。这样就实现了,限制每个ip登陆的次数。同时还可以看到有几个ip试图登陆网站。