
你打开网站后台的登录日志,看到几十上百条来自陌生IP的失败登录记录。有人在试密码。不是针对你,是在用脚本批量扫。扫到弱密码就进去挂马、改页面、发垃圾内容。
今天把防暴力破解的方法按效果从低到高排好,你可以根据实际情况选择。
限制登录尝试次数——最基础的手段
WordPress默认允许无限次尝试密码。攻击者可以用脚本连续试几千次,直到试出正确密码。限制尝试次数,是阻止暴力破解最直接的措施。
插件方案:WordPress可以安装Limit Login Attempts、Wordfence等插件。这些插件限制单个IP在指定时间内(如20分钟)最多尝试3-5次,超限后锁定该IP一段时间。
代码方案:不想装插件,可以用代码实现。在主题的functions.php中添加自定义登录失败计数逻辑,超过阈值后返回wp_die()或auth_redirect()阻止继续尝试。
局限性:限制尝试次数只能挡住脚本小子,挡不住使用代理池的攻击者(每次换一个IP)。它让攻击成本变高,但无法彻底杜绝。
隐藏后台登录地址——让攻击者找不到门
攻击者能扫你后台,是因为知道登录地址在哪里。WordPress默认是/wp-login.php,织梦默认是/admin/,FastAdmin安装时会生成随机入口文件名。把这些默认地址改掉,攻击者连门都找不到。
WordPress隐藏登录地址
修改当前主题的functions.php,在末尾添加:
php
// 隐藏wp-login.php登录地址
add_action('login_enqueue_scripts', 'custom_login_url');
function custom_login_url() {
if (strpos($_SERVER['REQUEST_URI'], 'wp-login.php') !== false &&
$_SERVER['REQUEST_METHOD'] == 'GET') {
header('Location: ' . home_url('/'));
exit;
}
}
同时自定义一个访问参数。访问https://你的域名/wp-login.php?你的自定义参数时正常显示登录页,直接访问/wp-login.php则跳转走。
其他CMS后台地址隐藏
- FastAdmin:后台入口文件名在安装时随机生成,存储在
fa_config表的admin_url字段。修改该字段并重命名入口文件即可。 - 织梦(DedeCMS):后台路径默认为
/admin/,直接修改文件夹名即可。但需要同步修改/data/config.cache.inc.php中的$cfg_admin_dir配置项,否则后台会出错。
注意事项
登录失败次数限流(Nginx层)
攻击者用代理池轮换IP,隐藏后台地址也可能被扫出来。这时可以在Nginx层对登录请求做频率限制——不管IP怎么换,同一IP单位时间内的请求次数有限。
nginx
# 限制/wp-login.php请求频率
limit_req_zone $binary_remote_addr zone=login_limit:10m rate=5r/m;
location = /wp-login.php {
limit_req zone=login_limit burst=10 nodelay;
proxy_pass http://backend;
}
同一IP每分钟最多5次登录请求,超过后返回429。用代理池可以绕过,但成本高很多。
启用双因素认证(2FA)——最后一道防线
密码可以被猜中,2FA需要攻击者同时拿到你的手机或邮箱验证码。即使密码泄露,没有第二因子也进不来。
WordPress:Wordfence插件自带2FA功能,支持Google Authenticator。登录时需要输入密码+6位动态验证码。
通用方案:支持TOTP标准(如Google Authenticator、Microsoft Authenticator),大多数CMS都有对应的2FA插件。配置后登录流程变为:输入账号密码 → 输入动态验证码 → 登录成功。
2FA是防暴力破解最彻底的手段。密码可以被试出来,动态验证码每30秒变一次,攻击者没法试。
各方案对比
| 方案 | 防护效果 | 实施难度 | 用户影响 |
|---|---|---|---|
| 限制登录尝试次数 | 中等 | 低 | 低 |
| 隐藏后台地址 | 中等 | 低 | 低 |
| Nginx限流 | 较高 | 中 | 低 |
| 双因素认证(2FA) | 最高 | 中 | 中 |




