AI 建站最大的错觉是「上线就完事」。真实情况是:任何一个公开站点,在上线几小时内就会开始被自动化流量扫描——撞库 wp-login.php 、探测 xmlrpc.php 、抓内容、刷接口。防爬与限流的正确做法不是装一个安全插件就结束,而是在边缘层、应用层、服务器层各放一道,并且所有规则先「只记录不拦截」跑一周再收紧。
先搞清楚要挡的是哪四类流量
| 流量类型 | 特征 | 该在哪一层挡 | 推荐动作 |
|---|---|---|---|
| 撞库 / 暴力破解 | 短时间内大量 POST /wp-login.php | 边缘层 | 频率限制 + 托管质询 |
| 漏洞扫描 | 枚举 /wp-content/plugins/xxx 、探测 xmlrpc.php | 边缘层 | 直接 Block |
| 内容抓取 | 高频 GET 、异常 UA 、无 JS 执行 | 边缘层 + 应用层 | 质询 / 限速 / robots 约束 |
| 应用层滥用 | 刷搜索、刷表单、刷 REST 接口 | 应用层 | 按接口单独限速 |
分不清这四类,规则就会写成一刀切,最常见的后果是把搜索引擎爬虫和真实客户一起挡在门外。
边缘层:五条必配规则
以 Cloudflare 这类边缘 WAF 为例,下面这组规则是性价比最高的最小集,免费套餐基本都能配:
- 登录页限速:
http.request.uri.path eq "/wp-login.php" and http.request.method eq "POST",单 IP 每分钟超过 5 次就封 1 小时。真人输错密码不会触发,脚本第一次跑就会被封。 - 封 xmlrpc.php:
http.request.uri.path eq "/xmlrpc.php",动作直接 Block 。它既是撞库放大器也是 DDoS 反射源,2026 年几乎没有主流插件还依赖它。 - 禁止执行上传目录里的 PHP:
http.request.uri.path contains "/wp-content/uploads/" and http.request.uri.path ends_with ".php",动作 Block 。这条能挡掉一大类「伪装成图片的马」。 - 可疑 UA 拦截:User-Agent 匹配
(python-requests|curl/[0-6]|masscan|zgrab),动作 Block 。 - 后台 IP 白名单:
http.request.uri.path contains "/wp-admin" and not ip.src in {你的出口 IP},动作 Block 。务必放行 admin-ajax.php,否则前台搜索、购物车更新会全部失效——这是新手最常踩的坑。
登录页不要直接 Block 。换成 IP 或换网络后,你自己也会被锁在门外。用「托管质询 / Managed Challenge 」更合理:真人过验证,脚本过不去。
应用层:Nginx 限流与 WordPress 加固
边缘层挡的是通用攻击,按接口限速还得靠自己。 Nginx 侧用 limit_req 配一个通用桶:
# http 段定义
limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=search:10m rate=1r/s;
# server 段引用
location / {
limit_req zone=general burst=20 nodelay;
}
location = /?s= {
limit_req zone=search burst=5 nodelay;
}
WordPress 侧再补几条常量,把后台能被当作跳板的口子关掉:
// wp-config.php
define( 'DISALLOW_FILE_EDIT', true ); // 禁止后台编辑 PHP 文件
define( 'FORCE_SSL_ADMIN', true ); // 后台强制 HTTPS
define( 'WP_AUTO_UPDATE_CORE', 'minor' );
REST API 要不要一起限流?
要,但不能一刀切。 REST API 是很多前台功能和自动化发文的入口,直接封会让区块编辑器、部分插件和你的发布脚本一起失效。正确做法是对
/wp-json/wp/v2/posts 这类写入路径做单独限速 + 应用密码鉴权,对只读的 GET 路径保持宽松。服务器层:别忘了锁源站 IP
如果只用 CDN 挡在前面,而源站 IP 还暴露着(常见于邮件 MX 记录、历史子域名解析),攻击者可以完全绕过边缘层直连你的服务器。做两件事:
- 用 Shodan / SecurityTrails 反查域名历史解析,清理暴露源站 IP 的入口。
- 服务器防火墙只放行 CDN 的官方 IP 段,其余 80/443 一律丢弃。
上线顺序:先记录,后拦截
- 第 1 天:所有规则设为「仅记录」,不产生任何拦截动作。
- 第 2–3 天:看日志,统计被命中的 IP 、 UA 、路径,区分误伤与真实攻击。
- 第 4 天:把误伤路径(如 admin-ajax.php 、 REST 只读接口)加进跳过条件。
- 第 5 天:确定性高的规则(xmlrpc.php 、 uploads 下的 PHP)改为 Block 。
- 第 6 天:限速类规则改为托管质询,观察一周。
- 第 7 天:开启告警,把「单规则短时间大量命中」推送到邮箱或 IM 。
三个最常见的误配置
- 只装 WAF 不更新核心与插件:WAF 是滤网不是免死金牌,已知 CVE 该补还是得补。
- 规则设太凶挡住真实下单:表单提交、支付回调、 Webhook 回调都要单独放行,最好按 IP 白名单而不是按 UA 放行。
- 没有备份就上拦截规则:WAF 挡的是「进来之前」,备份救的是「已经出事之后」,两者不能互相替代。
安全是个体系工程,本文只覆盖流量侧。 HTTPS 与安全响应头部分可以看 AI 建站 HTTPS 配置指南;出事后怎么还原,参考 AI 建站备份与恢复怎么做;日常要跑哪些检查项,见 AI 建站上线后的维护清单与自动化。
直接封掉 wp-login.php 是不是最安全?
不是,那是把自己也关在门外。正确做法是对 POST 请求做频率限制或托管质询,让真人在输错几次后仍能通过验证,脚本则在第一轮就被拦下。如果团队出口 IP 固定,再加一层 IP 白名单更稳妥。
xmlrpc.php 可以无脑封吗?
绝大多数站点可以。它用于 pingback 和远程发布,2026 年主流插件基本不再依赖。若你确实用第三方发布工具,只放行那一个来源 IP 段即可,不要全开。
限流阈值设多少合适?
登录页单 IP 每分钟 5 次 POST 是通行值;整站通用限流 10r/s 、 burst 20 适合多数中小站点;站内搜索、表单提交这类高成本接口单独设 1r/s 。最终阈值要按你自己的访问日志调,不要照抄。
怎么判断规则有没有误伤正常用户?
上线前一周只记录不拦截,然后对比「命中规则的 IP 数」与「这些 IP 是否产生了有效会话(登录、加购、提交)」。有有效会话却命中规则,就是误伤,需要加跳过条件。










评论 (0)