WordPress站点如何有效的防止wp-login.php登录页面被爆破

发布时间:

最近在群里看到有不少的小伙伴在说自己的WordPress站点被攻击了,wp-login.php登录页面被暴力破解,看到这个消息立马检查了一下自己的服务器日志,所幸没有遇到攻击,不过还是第一时间就增强了代码上的安全防御能力。今天总结出来几个防止wp-login.php登录页面被爆破的技巧分享给大家,希望可以帮助到各位站长们。

WordPress站点如何有效的防止wp-login.php登录页面被爆破

方法一:隐藏后台登录地址

目前网上广泛流传的做法是隐藏 WP 默认后台登录地址,下面2个代码随便挑一个,放入自己主题的 functions.php 里即可:

/**
 * WordPress 隐藏后台登录地址
 * https://www.ilxtx.com/wordpress-disable-wp-login-php.html
 * 方法 1
 */
add_action('login_enqueue_scripts', 'lxtx_login_protection');
function lxtx_login_protection(){
    if( empty($_GET['theme']) || ($_GET['theme'] != 'dragon') ){
        $url = home_url();
        header('Location: $url');
    }
}
/**
 * WordPress 隐藏后台登录地址
 * https://www.ilxtx.com/wordpress-disable-wp-login-php.html
 * 方法 2
 */
add_action('login_enqueue_scripts', 'lxtx_login_protection');
function lxtx_login_protection(){
    if( empty($_GET['theme']) || ($_GET['theme'] != 'dragon') ){
        $url = home_url();
        echo "<script language='javascript' type='text/javascript'>window.location.href='$url';</script>";
    }
}

加入以上代码后,你只有打开 http://你的域名/wp-login.php?theme=dragon 才能进入 WP 的默认登录页面。但,此方法是掩耳盗铃,仅仅只是隐藏了后台登录地址而已,对于那些使用机器批量扫描直接 post 爆破登录的来说,防护能力为0。

方法二:限制登录错误次数

为了解决上面隐藏登录地址代码的防护能力缺陷,我之前一直使用Login LockDown插件来限制登录错误次数,效果非常好。

方法三:彻底封禁登录地址

上面提到了,隐藏后台登录地址没有防护爆破的能力,在此,龙笑天发现了 2 种彻底封禁 wp-login.php 登录页面的方法,强烈推荐使用方法 3.2,可防止各种 post 扫描爆破,使自己的网站更加安全!

3.1 利用 Nginx 来封禁

可以利用 nginx 配置来直接禁止 wp-login.php 的访问请求。在你域名 conf 中,在其他 location 之前,再加多下面的语句:

location ~ ^/wp-login\.php {
 deny all;
 log_not_found off;
 access_log off;
}

此方法会导致无法通过 wp-login.php 来登录 WP 和退出登录 WP 了。

3.2 WP 自带钩子来封禁

将下面代码放入自己主题的 functions.php 里即可:

/**
 * WordPress 安全:彻底禁用 wp-login.php 登录页面,防止被机器扫描爆破
 * https://www.ilxtx.com/wordpress-disable-wp-login-php.html
 */
add_action('init','lxtx_disable_wplogin_page');
function lxtx_disable_wplogin_page(){
    global $pagenow;
    if( 'wp-login.php' == $pagenow && !is_user_logged_in() ) {
        $url = home_url();
        wp_redirect($url);
        exit();
    }
}

此方法直接封禁 wp-login.php 页面的各种请求,各种扫描爆破登录也就无效了。当然,默认的 WP 登录页面也不能进入了;对于那些使用前台弹窗登录(比如本站的Dragon 主题)或自定义登录页面的高级主题来说,不会收到任何影响。

方法四:删除或改名 Wp-Login.Php

最后,说一种较“极端”点的方法,直接删除掉网站根目录下的 wp-login.php(或改个复杂名字),这样就啥扫描都没用了... 但要注意,删除后,不能使用 WP 默认的登录页面登录网站了;另外,已经登录的用户也不能通过 logout 进行注销登录了。