所有文章

WordPress 需要防火墙吗,还是恶意软件扫描器就够了?

Web 应用防火墙和恶意软件扫描器在 WordPress 网站上各自做什么,防火墙可以从哪里来,以及添加之前该检查什么。

Radek,ENSOMEDIA发布于 7 分钟阅读In EnglishPo polskuAuf DeutschEn españolEn françaisبالعربية

防火墙和扫描器做的是不同的事,大多数 WordPress 网站两种保护都有会更好。防火墙在 WordPress 处理每个请求之前先看一遍,拒绝符合攻击特征的请求。扫描器查看网站上已有的东西:文件、账号、设置和插件版本。防火墙无法告诉你上个月有人植入了后门。扫描器无法拦下植入后门的那个请求。

防火墙不一定是 WordPress 插件。对很多小网站来说,它来自主机商,或来自网站前面的 CDN。

Web 应用防火墙做什么

Web 应用防火墙(WAF)位于访客和你的网站之间。对每个请求,它把地址、参数、表单字段和标头与一组规则对照,然后拦截请求、减慢请求或放行请求。典型规则能拦截 SQL 注入和跨站脚本尝试、对存在已知漏洞的插件文件的请求、大量登录尝试和恶意机器人。

它可以运行在三个位置:

  • 边缘,也就是所有流量都经过的 CDN 或反向代理。被拦截的请求根本到不了你的服务器,所以不消耗服务器资源。
  • 服务器上,作为 Web 服务器的模块,由主机商对它托管的每个网站运行。
  • WordPress 内部,作为插件。请求到达你的服务器、PHP 启动之后它才能看到,而且每个请求都会占用主机的 CPU 和内存。作为回报,它了解 WordPress:谁已登录,某个网址属于哪个插件。

防火墙做不到什么

防火墙按规则逐个判断请求。无论规则集如何,有些缺口依然存在:

  • 用被盗但有效的密码登录,看起来和所有者本人登录一样。
  • 还没有人为之写规则的插件漏洞,会直接通过。规则跟随已公布的漏洞,所以总有一个时间窗口。
  • 已经在服务器上的代码会继续运行。入侵之后才安装的防火墙,不会移除后门。
  • 从管理员账号(包括被劫持的账号)做出的改动,对防火墙来说是普通流量。

这就是为什么更新排在第一位。针对已知漏洞的防火墙规则,只是在你更新之前争取时间。它不能代替更新。

恶意软件扫描器做什么

扫描器检查网站的状态。一款好的 WordPress 扫描器会:

  • 把 WordPress、插件和主题文件与 WordPress.org 上对应版本的官方副本对比,由此找出被改动的文件,无需猜测,
  • 查找 uploads 文件夹里的 PHP 文件,
  • 列出管理员账号,并发现新增的账号,
  • 将插件和主题版本与已公布的漏洞对照,
  • 找出任何人都能下载的备份和配置副本。

它在攻击发生时不会拦截任何东西。它事后告诉你什么变了、该怎么办。如何解读这类结果,见如何检查网站是否有恶意软件。

防火墙可以从哪里来

你的主机商。 很多主机商会对其服务器上的每个网站过滤请求。请书面询问:我的网站前面有没有 Web 应用防火墙,谁来更新规则,我能不能看到它拦截了什么?如果答案是有,你可能不需要再加一层。

网站前面的 CDN。 像 Cloudflare 这样的 CDN 位于访客和你的服务器之间,可以在边缘过滤请求。2026 年 10 月 19 日,Cloudflare 的 WAF 文档(英文)写明,其免费托管规则集适用于所有 Cloudflare 套餐,涵盖影响重大、被广泛利用的漏洞。设置好 CDN 之后,检查两件事。你的服务器不应该响应绕过 CDN、直接访问其 IP 地址的请求。你的登录保护应该看到访客的地址,而不是 CDN 的地址。

防火墙插件。 当主机商不提供、CDN 又不适用时,这是一条路。选择之前,在它的介绍页或文档里查看:

  • 它是否先于其他插件加载,这样在存在漏洞的代码之前就能看到请求,
  • 规则多久更新一次,免费用户是否与付费用户同时获得新规则,
  • 有没有学习模式或仅记录模式,这样在它开始拦截之前,你能看到它会拦截什么,
  • 它对服务器的影响。在启用前和启用一天后分别测量加载时间。

每一层只保留一个防火墙。一个网站上装两个防火墙插件,同样的工作做两遍,客户被拒绝访问时,也很难分辨是哪一个干的。

你需要哪一个

  • 你的主机商已经在过滤请求吗?那么扫描器加上良好的习惯就能覆盖其余部分。
  • 你经营网店、会员区,或者很多人使用的表单吗?在边缘设置防火墙就有意义,因为可攻击的面更大,可损失的也更多。
  • 你在新版本发布后几天内更新插件吗?那么防火墙多半只是拦下一些噪声。如果更新要拖几周,它覆盖的正是这段缺口。
  • 如果服务器上的某个文件今晚被改了,你能发现吗?如果不能,无论你还有什么,都需要扫描器。

两者都不能代替存放在服务器之外的备份。入侵之后,一份干净的副本才能让网站恢复。

需要留意什么

  • 误拦截。 如果防火墙拒绝了支付服务商的回调或联系表单的消息,你会丢订单,而且看不到任何错误。前几周要读它的日志。
  • 把防火墙当作推迟更新的理由。 规则可能比攻击来得晚。
  • 套餐里承诺“清理”。 清除恶意软件是对文件的工作,由读得懂文件的人来做。问问是谁做,以及他们如何查明攻击者是怎么进来的。否则同一个入口依然敞开。

Ensomedia Security 处于什么位置

Ensomedia Security 主要是一个带登录保护和安全加固开关的扫描器。从 1.1.26 版起,它还有一个“请求防火墙”,在你打开之前保持关闭。它是运行在你服务器上的本地规则,不是云端 WAF,也不会清理被入侵的网站。

对照上面的清单:

  • 它加载得早。一个必用(must-use)文件会在普通插件加载之前检查每个请求。在用 CGI 或 FastCGI 运行 PHP 的主机上,“在 WordPress 之前加载”设置会通过 .user.ini 文件让它在 WordPress 之前启动。
  • 规则随插件更新发布,所有网站都一样,因为插件没有付费版。规则覆盖常见的注入攻击和可执行文件上传,按 IP、地址段和国家封禁,请求和 404 次数限制,以及范围很窄的例外。在 Cloudflare 后面,国家封禁使用插件自 1.1.28 版起自带的 Cloudflare 地址段。普通流量(WooCommerce 结账、区块编辑器、REST API、评论、联系表单和登录)都有测试覆盖,在所有规则开启时可以正常通过。
  • 它有“仅记录”模式。先用这个模式,花一两周查看防火墙的历史记录,再切换到“拦截”。
  • 它在你的服务器上运行,所以被拦截的请求已经到达你的主机并启动了 PHP。它不能像网络边缘的过滤那样减轻服务器负担。它不向任何地方发送请求数据,历史记录在你的网站上最多保留 30 天。

主机商或 CDN 的防火墙和这个防火墙工作在不同层面,可以同时使用。不要把它和另一个防火墙插件一起运行。如果它把你自己拦在外面,插件的常见问题里写了不进后台也能关闭它的方法。

它还做这些事情:

  • 它首先核对官方校验值。WordPress 核心、目录中的插件和目录中的主题,会与 WordPress.org 为你的版本发布的文件对比。
  • 它从不自行改写网站。只有在你按下按钮或打开开关时,文件、用户和设置才会改变。有中等或更高严重度发现项的文件,可以一键移入隔离区,“还原”会把它放回去。自 1.1.21 版起,一个按钮可以用来自 WordPress.org 的原始文件替换被改动的核心、插件或主题文件,并把被改动的文件保留在隔离区,所以还原即可撤销修复。自 1.1.25 版起,它还能清除被注入到主题、自定义插件、uploads 目录、文章或选项中的代码:它会显示确切的改动,先做备份,经你同意后才应用,每次清理都可以撤销。它所解释的其他清理工作,由你、你的开发者或主机商去做。
  • 它按地址和用户名限制失败的登录次数。只计算连接本身的地址,从不采信请求可以伪造的标头。在 CDN 或代理后面时,你把它的地址列为可信代理,并选择携带访客地址的标头。
  • 自 1.1.27 版起,它有可选的登录检查:使用通行密钥免密码登录,在登录、注册和密码重置时进行机器人验证,拒绝出现在数据泄露中的密码,隐藏登录地址,以及在评论、注册和联系表单中设置垃圾信息陷阱。这些功能在你打开之前全部关闭。
  • 它有安全加固开关,打开之前全部关闭:文件编辑器、XML-RPC、禁止 uploads 中运行 PHP,以及安全标头。如果你的服务器、CDN 或其他插件已经发送了某个标头,它就保持原样。
  • 它有虚拟补丁,范围是刻意收窄的。开启实时威胁情报后,一个小型的必用(must-use)文件,可以在你所装插件的已安装版本受影响期间,拦截利用该插件已知漏洞的请求。如果你在启用插件后接受开启防护的提议,补丁就会拦截,否则只记录匹配的请求。它不像防火墙那样检查所有流量。

各项检查、每日定时扫描和邮件提醒都是免费的,无需账号,没有限制。防火墙、登录检查、实时威胁情报、漏洞查询和 AI 二次意见在你打开之前保持关闭。你可以在 WordPress.org 目录中找到这款插件,名称为 Ensomedia Security,插件页面列出了每项可选服务会发送什么。与 Wordfence 的逐项对比,以及各自具备和缺少的功能,见对比页面(英文)。

从外部检测你的网站。 在 shieldwave.io 输入你的网址。大约需要 90 秒,不需要密码,也不需要安装插件。