前言
WordPress的默认登录页面是wp-login.php,这是攻击者最常攻击的目标之一,使用暴力破解密码方式入侵网站后台,可限制指定IP地址或IP网段允许访问登录页面,即使攻击者知道了管理员用户名和密码,他们也无法打开登录页面入侵网站后台。
以下提供两个版本,第一个是代码版,只需将代码粘贴到主题的模板函数文件(functions.php)中并修改IP地址或网段即可。
第二个是插件版,可直接在网站后台修改设置,增加两个重定向方式,重定向到404错误页面和自定义URL。
代码版使用方法
WordPress后台 > 外观 > 主题文件编辑器 > 点击模板函数
> 将代码粘贴到模板函数文件中 > 修改IP地址、网段 > 最后更新文件
// 限制指定IP地址、网段允许访问登录页面(wp-login.php)
// 多个获取IP地址的方式
function get_user_ip() {
if (!empty($_SERVER['HTTP_X_REAL_IP'])) {
return $_SERVER['HTTP_X_REAL_IP'];
} elseif (!empty($_SERVER['HTTP_CLIENT_IP'])) {
return $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
}
return $_SERVER['REMOTE_ADDR'];
}
// 检查IP地址是否在指定范围内
function ip_in_range($ip, $range) {
list($range, $netmask) = explode('/', $range);
// 将IP地址和范围转换为长整型
$ip = ip2long($ip);
$range = ip2long($range);
$netmask = 32 - (int)$netmask; // 计算主机部分的位数
// 计算网络地址
$range = $range >> $netmask << $netmask;
// 检查IP是否在范围内
return ($ip >> $netmask << $netmask) === $range;
}
// 检查访客IP是否在允许的范围内
function is_ip_allowed($user_ip, $allowed_ip_ranges) {
foreach ($allowed_ip_ranges as $range) {
if (ip_in_range($user_ip, $range)) {
return true;
}
}
return false;
}
// 限制访问登录页面的函数
function restrict_custom_login_access() {
// 获取访客的IP地址
$user_ip = get_user_ip();
// 允许访问的IP地址或IP网段
$allowed_ip_ranges = [
'11.22.33.44', // 你的宽带IP地址,可到 ip.cn 查询自己的IP地址
'11.22.33.0/24', // IP网段格式,例如 11.22.33.* ,就填写11.22.33.0/24
'11.22.0.0/16', // 如果是11.22.*.* ,就填写11.22.0.0/16(不推荐,因为范围太大)
];
// 检查访客是否在访问wp-login.php
if (strpos($_SERVER['REQUEST_URI'], 'wp-login.php') !== false) {
// 如果IP不在允许的范围内,重定向到网站首页
if (!is_ip_allowed($user_ip, $allowed_ip_ranges)) {
wp_redirect(home_url());
exit;
}
}
}
// 添加到 init 钩子
add_action('init', 'restrict_custom_login_access');

插件版使用方法
一、点此下载插件压缩包,按照下图的步骤,在网站后台找到插件列表,点击添加新插件
,上传插件压缩包并启用插件。

二、插件设置的入口在左侧栏的设置
菜单中。

三、按照下图的步骤,添加IP地址
或IP网段
,再根据你的需求设置重定向方式
,最后点击保存设置
。

四、建议搭配邮件验证码登录&一次性免密码登录
插件同时使用,提高账户安全性。
更换IP地址后无法访问登录页面的临时解决方法
本人技术有限,暂时没有制定出更便捷的方法,只能通过笨方法临时解决。
一、通过虚拟主机、运维面板的文件管理
工具,找到WordPress的插件目录,例如网站主目录/wp-content/plugins/
,对custom-login-restriction
目录名称随便改个名称,例如在目录名称的后面加个数字1
,也就是custom-login-restriction1
。

二、登录网站后台,再把上图的插件目录名称改回来,就是把custom-login-restriction1
改回custom-login-restriction
。
三、在插件列表中启用插件,打开插件的设置,重新添加当前IP地址或网段,最后保存设置。
不错不错,这个白名单IP可以弄个输入窗口不,代码里面改感觉稍微有点麻烦
已做成插件了,增加了两个重定向方式。