在运营WordPress网站的过程中,许多站长都遇到过服务器CPU突然飙升、数据库负载过高的情况。排查日志后往往发现,这是一些恶意爬虫或脚本正在疯狂请求带有复杂查询参数的URL(例如?order=rand或?s=某某关键字)。这些请求会穿透CDN缓存,直接撞击数据库,导致网站瘫痪。有时候主题铺会看一下日志,每天都大量的恶意扫描或者爬虫的记录,对于自己的正常访客统计也会起到干扰的作用。
为了解决这个问题,部署一套应用层的“软质询”机制显得尤为重要。今天主题铺就分享一段代码,它能在不依赖昂贵硬件防火墙的情况下,为你的WordPress网站增加类似Cloudflare的“5秒盾”防护效果。
为什么需要应用层质询?
通常我们使用CDN或Nginx缓存来加速网站,但这些缓存机制主要针对静态页面。一旦URL后面带上了?order=desc、?themes_type=xxx等参数,WordPress就需要实时去数据库查询数据。攻击者正是利用这一点,通过高并发的恶意参数扫描发起CC攻击。同时大量的爬虫使用默认的WordPress搜索功能进行网站攻击,这也是要重点防护的对象。
据主题铺观察,特别是像WordPress子比主题这样功能强大的资源站主题,由于其筛选功能丰富(如按时间排序、按类型筛选),更容易成为这类攻击的目标。
代码原理解析与优化建议
这段代码的核心优势在于其针对性。它不会像某些暴力插件那样拦截所有访问,而是精准识别数组中参数的请求。对于一些访问有Referer 欺骗及cookie欺骗的,大部分的防护都被绕过去,所以针对于此,主题铺特别进行了代码的优化改进。
- IP+UA 绑定验证:
版本采用了MD5(日期 + IP + UA + 密钥)的方式。这意味着,即便攻击者抓取到了Token,也无法在另一台服务器(IP不同)或使用不同的爬虫工具(UA不同)复用该Cookie。 - 白名单机制:
对于已登录用户和管理员,系统直接放行。这保证了站长在后台管理或用户在会员中心操作时,不会被频繁的弹窗打扰,兼顾了用户体验。 - Referer 智能判断:
正常用户从站内点击链接(如点击“按热度排序”),此时代码会选择性放行,减少误杀。但针对极其消耗资源的随机排序扫描,强制进行JS验证,因为随机排序通常是数据库性能的杀手。
效果如下图,正常的访客访问则不会受影响。
![图片[1]-WordPress安全防爬虫恶意扫描教程 为高负载参数添加“5秒盾”-主题铺](https://cdn.zhutipu.com/wp-content/uploads/2026/01/20260108151531641.png/ztp)
核心防护代码部署
下面的代码方案采用了“JS质询”的方式:当检测到敏感参数请求时,服务器暂时拦截请求,返回一个带有JavaScript计算逻辑的页面。正常浏览器会自动执行JS并写入Cookie,随后刷新进入目标页面;而普通的脚本爬虫因无法执行JS,会被拒之门外。
防护方式及代码如下:
编辑点评
虽然这款“5秒盾”是基于PHP运行的,这意味着请求依然到达了PHP解析层,不像Nginx或硬件防火墙那样在流量入口处就能拦截。但是,主题铺认为它依然具有极高的实战价值。因为对于大多数中小型WordPress站点而言,系统瓶颈往往不在流量带宽,而在于MySQL数据库的查询压力。可以瞬间降低被恶意扫描的站点CPU占用及内存占用。
通过在PHP层拦截恶意请求,阻止了后续WordPress核心加载、主题文件加载以及最耗时的SQL查询过程,这能节省90%以上的服务器资源开销。这对于预算有限、无法购买昂贵WAF服务的个人站长来说,是一个性价比极高的防御方案。
当然,你如果觉得代码麻烦,可以选择插件直接设置。





















暂无评论内容