WordPress

WordPress限制指定IP地址允许打开登录页面 提高网站安全性

2024年12月26日 · · · 本文共2099个字 · 预计阅读7分钟104次已读
目录
文章目录隐藏
  1. 前言
  2. 代码版使用方法
  3. 插件版使用方法
  4. 更换IP地址后无法访问登录页面的临时解决方法

前言

  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');
WordPress限制指定IP地址允许打开登录页面 提高网站安全性

插件版使用方法

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

WordPress限制指定IP地址允许打开登录页面 提高网站安全性

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

WordPress限制指定IP地址允许打开登录页面 提高网站安全性

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

WordPress限制指定IP地址允许打开登录页面 提高网站安全性

四、建议搭配邮件验证码登录&一次性免密码登录插件同时使用,提高账户安全性。

更换IP地址后无法访问登录页面的临时解决方法

本人技术有限,暂时没有制定出更便捷的方法,只能通过笨方法临时解决。

一、通过虚拟主机、运维面板的文件管理工具,找到WordPress的插件目录,例如网站主目录/wp-content/plugins/,对custom-login-restriction目录名称随便改个名称,例如在目录名称的后面加个数字1,也就是custom-login-restriction1

WordPress限制指定IP地址允许打开登录页面 提高网站安全性

二、登录网站后台,再把上图的插件目录名称改回来,就是把custom-login-restriction1改回custom-login-restriction

三、在插件列表中启用插件,打开插件的设置,重新添加当前IP地址或网段,最后保存设置。

2 条评论
  1. 老白2024-12-25 · 17:14

    不错不错,这个白名单IP可以弄个输入窗口不,代码里面改感觉稍微有点麻烦

    • 不凡2024-12-26 · 0:37

      已做成插件了,增加了两个重定向方式。

Powered by atecplugins.com