Xenice WAF:WordPress网站防火墙插件

Xenice WAF:WordPress网站防火墙插件

v2.1.8 WP 6.8+ PHP 8.0+
单域名授权 免费更新 一年技术支持

在日益复杂的网络环境中,WordPress站点始终是攻击者的重点目标。Xenice WAF 不只是一个安全插件,更是一套专为WordPress设计的主动式Web应用防火墙。它基于PHP原生实现,深度集成SQLite数据库(无需额外扩展),以极小性能开销,为您提供IP黑白名单、URI/参数过滤、CC攻击防护、JS挑战等全方位安全能力。

为什么选择 Xenice WAF?

  • 与WordPress深度集成:不同于通用WAF方案,Xenice WAF完全基于WordPress钩子机制(Hook)构建,在init阶段静默启动,不干扰核心流程,与现有插件生态无缝共存,真正实现“即插即用”。
  • 主动防御,不止于规则:不仅提供IP/URI/参数等多维度正则过滤,更内置JS Challenge人机验证CC智能频率限制,从被动拦截升级为主动挑战,有效识别并阻断自动化攻击与恶意爬虫。
  • 轻量化架构,高性能保障:基于PHP原生实现,不依赖额外服务器模块(如Nginx Lua或Apache ModSecurity),结合SQLite本地数据库,以极低内存和CPU开销支撑日均百万级请求,适合从中小站点到高并发业务场景。
  • 数据闭环,合规易追溯:所有审计日志、频率统计均持久化存储于/wp-content/uploads/xwaf/.private/目录,支持自动过期清理,无需外部日志服务,满足数据安全与追溯分析需求。

📦 核心能力一览

功能模块说明
IP黑白名单支持IPv4/IPv6(通过IPChecker类),可精确或通配匹配
URI黑白名单支持正则表达式匹配,灵活拦截或放行特定路径
GET/POST参数过滤分别对参数值(value)和参数名(key)进行正则匹配阻断
User-Agent过滤可拦截恶意爬虫或异常UA,同时支持主流搜索引擎白名单放行
CC攻击防护(频率限制)基于IP+URI的请求频率限制,自动封禁高频请求者
JS Challenge(人机验证)可选启用JavaScript挑战,有效拦截非浏览器自动化攻击
审计日志完整记录访问与拦截日志,支持SQLite存储,便于追溯分析
授权管理内置License校验,支持激活/续费,保障商业合规

架构优势

  • 极简启动xwaf类在init阶段加载,不干扰WordPress核心流程。
  • 钩子扩展:提供xwaf_do_action('xwaf_start')自定义动作钩子,方便二次开发。
  • 多维度匹配:所有过滤规则均支持正则表达式(preg_match),灵活适配复杂场景。
  • SQLite持久化:日志与频率统计基于SQLite,无需额外服务,数据安全可靠。

产品截图

Q1:Xenice WAF 会影响网站速度吗?
A:不会。插件仅在请求初期执行轻量级正则匹配和SQLite查询操作。SQLite采用事务写入优化,经压测,开启全部规则后对TTC(Time-To-Complete)影响小于8ms。

Q2:SQLite 能支撑高并发吗?
A:完全可以。SQLite采用WAL(Write-Ahead Logging)模式,支持并发读和单写,适合日均百万级PV的WordPress站点。插件已优化查询语句,使用索引加速,性能表现优异。

Q3:如何避免误拦正常用户?
A:建议优先启用白名单(IP/URI),并开启搜索引擎蜘蛛放行。所有规则支持正则,可精细配置。若发生误拦,可通过日志快速定位并调整规则。

Q4:数据库文件安全吗?
A:数据库存储在/wp-content/uploads/xwaf/目录,插件自动创建.htaccess文件禁止直接访问,确保数据安全。

Q5:是否支持多站点(WordPress Multisite)?
A:支持。插件基于全局配置,各子站点可共用一套规则,也可通过$xwaf_config按站点区分。

Q6:JS Challenge 会阻止搜索引擎抓取吗?
A:只要在设置中启用「排除搜索引擎蜘蛛」(
exclude_search_spiders),Googlebot、Bingbot、Baiduspider 等主流搜索引擎将完全绕过JS Challenge,不会对SEO产生任何负面影响。

Q7:授权失效后插件会停止工作吗?
A:已激活的WAF规则会继续运行,但后台管理功能(设置、日志)将被锁定,直至重新激活授权。

安装与激活

  1. 登录WordPress管理后台(通常通过 域名/wp-admin 访问)。

  2. 导航至 插件 > 安装插件,点击 上传插件

  3. 选择已下载的插件压缩包,点击 安装插件

  4. 安装完成后,点击 启用

授权提示:若未激活授权,后台菜单仅显示「License」页面。输入有效授权码后即可解锁全部功能。


后台配置详解

Xenice WAF 插件已经内置了防护规则,插件激活即可生效,用户也可以自定义防护规则,配置入口位于 「WAF → Settings」,共包含7个功能标签页,覆盖全方位安全策略:


1. General(通用设置)

  • 默认拦截HTTP状态码:自定义返回的HTTP状态码(范围400-599),默认值为 403

  • 排除搜索引擎蜘蛛:开启后,Googlebot、Bingbot、Baiduspider 等主流搜索引擎将不受WAF规则限制,避免影响SEO收录。


2. IP Settings(IP设置)

  • 白名单IP列表:完全绕过WAF检测,适用于管理员IP或可信服务器。

    • 支持格式:

      • 127.0.0.1 – 单个IP

      • 10.0.0.* – 通配符匹配

      • 40.77.167.0/24 – CIDR网段

  • 黑名单IP列表:直接拦截,适用于已知攻击源或恶意IP。


3. URI Settings(URI设置)

  • 白名单URI模式:匹配的URI路径将跳过所有WAF规则。

    • 默认预置:

      • ^\/wp-admin(\/.*)?$ – WordPress管理后台

      • ^\/wp-json(\/.*)?$ – REST API

  • 黑名单URI模式:匹配的URI路径将被直接拦截,适合封锁特定漏洞路径或恶意入口。


4. Filter Rules(过滤规则)——核心配置区

提供针对请求不同维度的细粒度过滤能力:

 
 
过滤类型 说明 典型场景
GET URI Filters 拦截匹配正则的GET请求URI 拦截敏感文件路径访问
POST URI Filters 拦截匹配正则的POST请求URI 防护 wp-login.phpxmlrpc.php 暴力破解
GET Args Value Filters 过滤GET参数中的恶意值 SQL注入(selectunioninsert
GET Args Key Filters 过滤GET参数名中的恶意字符 检测目录遍历(../)或XSS
POST Args Value Filters 过滤POST参数中的恶意值 表单注入、跨站脚本攻击
POST Args Key Filters 过滤POST参数名中的恶意字符 检测提交字段名中的恶意代码
User-Agent Filters 拦截特定User-Agent的请求 封堵扫描器、恶意爬虫

使用建议

  • 所有规则均支持正则表达式,一行一条,支持 # 分隔符,大小写不敏感


5. Block Settings(频率限制与封禁)

  • IP封禁模块:基于IP总请求频率,当单IP在指定时间窗口内请求次数超过阈值,自动封禁。

    • 支持自定义时间窗口、封禁时长、返回HTTP状态码(默认 429 Too Many Requests)。

    • 数据存储:封禁状态持久化保存于 SQLite。

  • URI限流模块:针对单个IP访问单个URI的频率进行限制,精准防御CC攻击。

    • 可指定监控的请求方法(GET / POST)。

    • 数据存储:频率计数器使用 SQLite,避免内存溢出。


6. JS Challenge(JavaScript挑战)

启用后,首次访问的请求会返回一个JavaScript计算挑战,只有浏览器正确执行并携带验证Cookie后才能正常访问。

  • 有效拦截

    • 自动化扫描工具

    • 无头浏览器脚本

    • 非浏览器发起的恶意请求

  • 支持配置

    • 自定义Cookie名称与过期时间

    • 最大失败次数与失败锁定时间

    • 白名单URI(绕过JS Challenge,如静态资源、API接口)


7. Log Settings(日志设置)

  • 可配置项

    • 日志过期时间(默认7天,即 604800 秒)

    • 最大保留条数(默认各 10000 条)

  • 存储位置/wp-content/uploads/xwaf/.private/xwaf.sqlite

  • 自动清理:后台定时任务自动清理过期日志,无需人工维护。


加强防护

将以下代码添加至 wp-config.php 文件顶部,可使 WAF 提前生效,减少后续逻辑对系统资源的无效占用。

require __DIR__ . '/wp-content/plugins/xenice-waf/xwaf/index.php';

自定义扩展

开发者可通过钩子 xwaf_do_action('xwaf_start') 在WAF执行完毕后挂载自定义逻辑,实现灵活扩展。

v2.1.8(当前版本)

  • 新增 POST请求URI独立过滤(post_uri_filters)及开关enable_post_uri_filters

  • 新增 GET/POST参数名(Key)独立过滤(get_uri_args_key_filters / post_uri_args_key_filters

  • 优化 in_array() 方法支持数组值自动转为字符串匹配

  • 修复 空参数值(但is_numeric为true)不再触发过滤,减少误拦

  • 增强 日志记录时对超长Key截断(substr(..., 0, 100)),防止日志膨胀

  • 调整 搜索引擎蜘蛛列表增加SemrushBotAhrefsBot

v2.1.0

  • 重大更新 引入SQLite数据库存储,替代文件日志与Redis

  • 新增 自动数据库初始化与迁移机制

  • 新增 xwaf_rate_limit类,支持IP+URI频率限制(基于SQLite)

  • 新增 xwaf_js_challenge类,提供前端验证

  • 优化 日志查询性能,增加索引支持

v2.0.0

  • 完整重构为面向对象架构

  • 支持授权管理(License)

  • 新增后台管理界面(设置页、日志页)

  • 新增日志自动清理机制

 

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注