如何构建安全的 WordPress 4:限制搜索频率,防止搜索滥用攻击
这是「如何构建安全的 WordPress」系列文章的第四篇,前面三篇是关于用户的:
这篇开始我们转向 WordPress 搜索,WordPress 搜索最大的问题就是会被滥用,搜索滥用攻击(Search Abuse Attack),或者说搜索泛洪攻击(Search Flood Attack),它是 HTTP 泛洪攻击(HTTP Flood) 的一种变体。
搜索滥用攻击
什么是搜索滥用攻击(Search Abuse Attack):
简单说攻击者恶意利用网站的搜索功能,通过高频、自动化地提交不同的搜索关键词,使服务器持续执行数据库查询,从而消耗系统资源(CPU、数据库连接、带宽等),导致网站响应变慢甚至崩溃。
这类攻击最大的特点是可以绕过缓存,因为 WordPress 搜索的链接是 https://blog.wpjam.com/?s=关键词
,攻击者只要使用简单脚本不停的切换关键字(如 ?s=关键词1
、?s=关键词2
),缓存机制无法生效,每次请求都会触发数据库查询。
攻击的结果也是低成本高破坏,因为 WordPress 默认搜索使用 MySQL like
语法去检索文章的标题,摘要和内容查出相关的文章, MySQL Like
查询相对来说是比较耗时的。这样服务器资源(CPU、数据库、内存)很容易被耗尽,导致网站瘫痪(DoS/DDoS),正常用户访问行为也就被拖慢,影响业务可用性。
搜索次数限制
这类攻击最大防御方法是限流(Rate Limiting),就是限制单个 IP 的搜索请求频率(如 10 次/分钟)。
WPJAM 搜索优化插件 已经集成了搜索限流功能,如下图所示,可以限制支持限制每个 IP 每分钟搜索多少次,达到上限之后屏蔽多少分钟,甚至可以直接关闭搜索:

下图就是用户搜索达到上限之后,用户再次搜索之后页面显示的效果:

WPJAM 搜索优化插件 已经集上面所有的功能和相关代码,直接启用即可,点击查看 WPJAM 搜索优化插件 的详细介绍,Modular 主题也集成了,我会在介绍 WordPress 安全这系列文章的时候,将这些安全相关代码也整合到 Modular 主题中,争取打造最安全的 WordPress 主题。
WPJAM Basic 插件已经集成了 Memcached,下载 WPJAM Basic 之后,将 wpjam-basic/template/
目录下的 object-cache.php
文件复制到 wp-content
目录下即可。
专题:WordPress 安全: