后台登录安全防护
1. 强制强密码
无需插件,通过子主题的 functions.php 添加以下代码,强制用户设置强密码(至少包含大写、小写、数字和特殊字符):
<?php
// functions-strong-passwords.php
add_filter('user_profile_update_errors', 'esp_validate_password_strength', 10, 3);
function esp_validate_password_strength($errors, $update, $user) {
if (!empty($_POST['pass1'])) {
$password = $_POST['pass1'];
if (!preg_match('/[A-Z]/', $password)
|| !preg_match('/[a-z]/', $password)
|| !preg_match('/d/', $password)
|| !preg_match('/[W_]/', $password)
|| strlen($password) add('pass', '密码强度不足,需包含大小写字母、数字、特殊字符,且长度 ≥ 12');
}
}
}
2. 重命名或删除默认 “admin” 用户
在 MySQL 中运行以下查询,将 admin 用户名改为更难猜测的名称:
UPDATE wp_users
SET user_login = 'new_admin_name'
WHERE user_login = 'admin';
或删除该用户后重新创建:
DELETE FROM wp_users WHERE user_login = 'admin';
3. 隐藏登录 URL
安装并激活 WPS Hide Login 插件,然后在后台 设置 → WPS Hide Login 中配置自定义登录路径:
- 插件安装:
wp plugin install wps-hide-login --activate - 设置新路径:输入
/my-secret-login,保存后原/wp-login.php与/wp-admin将返回 404。Settings → General → WPS Hide Login → Login URL: /my-secret-login
4. 限制登录尝试
在子主题的 functions.php 中添加以下代码,实现对同一 IP 的登录次数限制(5 次封禁 15 分钟):
= $max) $_SESSION['lock_time'] = time();
} else {
$_SESSION['attempts'] = 0;
}
}
if (isset($_SESSION['lock_time'])) {
$elapsed = time() - $_SESSION['lock_time'];
if ($elapsed < $lock) wp_die("尝试次数过多,请 {$lock - $elapsed} 秒后再试。");
else { unset($_SESSION['lock_time']); $_SESSION['attempts']=0; }
}
}
add_action('wp_logout', function(){ if(!session_id())session_start(); unset($_SESSION['attempts'],$_SESSION['lock_time']); });
5. 启用两步验证(2FA)
使用 WP-CLI 一行命令安装 Two-Factor 插件,并在用户 → 你的个人资料中启用 TOTP(谷歌验证器):
wp plugin install two-factor --activate
// 强制所有管理员角色开启 2FA(放入 mu-plugins)
add_filter('wpcom_vip_is_two_factor_forced','__return_true');
6. HTTP 基本认证保护 wp-admin
在 wp-admin 目录下创建 .htpasswd 和 .htaccess:
.htpasswd(使用htpasswd工具生成):admin2:$apr1$abcdefgh$XYZ1234567890wp-admin/.htaccess:AuthType Basic AuthName "Restricted Area" AuthUserFile /path/to/.htpasswd Require valid-user
7. 强制后台 HTTPS
在 wp-config.php 中加入:
define('FORCE_SSL_ADMIN', true);
8. IP 白名单访问控制
使用 iptables 仅允许可信 IP 访问后台:
iptables -A INPUT -p tcp --dport 80 -m string --string "/wp-login.php" --algo bm -j DROP
iptables -A INPUT -p tcp -s 203.0.113.45 --dport 80 -m string --string "/wp-login.php" --algo bm -j ACCEPT
或在 Cloudflare Firewall Rules 中只放行指定 IP:
{
"action": "allow",
"filter": {"expression":"ip.src eq 203.0.113.45"},
"description":"Allow my office IP"
}
DDoS 与 CC 攻击防护
1. CDN 与 WAF(以 Cloudflare 为例)
-
速率限制:在 Security → WAF → Rate Limiting 中新增规则:
[ { "action":"challenge", "filter":{"expression":"http.request.uri.path eq "/wp-login.php""}, "description":"Challenge login floods" } ]Bot 管理:启用 JavaScript Challenge 拦截脚本化请求。
2. Nginx 限速
在 Nginx 配置文件中加入:
http {
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s;
server {
location /wp-login.php {
limit_req zone=login burst=5 nodelay;
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm.sock;
}
}
}
3. Apache mod_evasive
安装并启用模块后,在 /etc/apache2/mods-enabled/evasive.conf 添加:
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 600
DOSEmailNotify [email protected]
4. Fail2ban 异常检测
在 /etc/fail2ban/jail.local 中添加 WordPress 相关监控:
[wordpress]
enabled = true
filter = wp-login
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
并在 /etc/fail2ban/filter.d/wp-login.conf 中定义规则:
[Definition]
failregex = .* "POST /wp-login.php
5. ModSecurity 限速与 CC 防护
在自定义规则文件(如 /etc/modsecurity/modsecurity_custom.conf)中添加:
# 初始化 IP 集合
SecAction "phase:1,nolog,pass,initcol:ip=%{REMOTE_ADDR},id:900001"
# 登陆页面速率限制:3 分钟内超过 10 次封禁 5 分钟
SecRule IP:bf_block "@gt 0" "id:900002,deny,status:401,log,msg:'Blocked due to brute force'"
SecRule REQUEST_URI "@streq /wp-login.php" "phase:2,pass,nolog,setvar:ip.somepathcounter=+1,expirevar:ip.somepathcounter=180,id:900003"
SecRule IP:SOMEPATHCOUNTER "@gt 10" "phase:2,deny,status:429,log,msg:'Rate limit exceeded'"
6. CAPTCHA 与人机验证
在 wp-login.php 或评论表单中插入 Google reCAPTCHA v3:
<a href="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY">https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY</a>
grecaptcha.ready(function() {
grecaptcha.execute('YOUR_SITE_KEY', {action: 'login'}).then(function(token) {
var f = document.getElementById('loginform');
var input = document.createElement('input');
input.setAttribute('type','hidden');
input.setAttribute('name','g-recaptcha-response');
input.setAttribute('value',token);
f.appendChild(input);
});
});
后端验证:
$response = wp_remote_post('https://www.google.com/recaptcha/api/siteverify',[
'body'=>['secret'=>'YOUR_SECRET','response'=>$_POST['g-recaptcha-response']]
]);
$data = json_decode(wp_remote_retrieve_body($response));
if (!$data->success || $data->score<0.5) wp_die('验证失败');
7. 日志监控与告警
- UptimeRobot:注册并添加监控 URL,即可通过邮件/短信获知宕机。
- Logwatch/ELK:在服务器上配置定时推送日志至 ELK,实时分析异常流量。
citeturn0search3
延伸阅读
- VPS 建站教程合集
- Reality 443 端口复用怎么实现:Nginx ssl_preread 与 PSM 一键脚本
- 【测评】OVH VPS 1 SG:4C/8G RAM/75G SSD/400 Mbps unlimited
了解 VPS测评 - JQ 的更多信息
订阅后即可通过电子邮件收到最新文章。