上周,一位熟人写信给我 - WooCommerce 上一家在线汽车配件商店的老板。他写道:“奥列格,我的网站很慢,主机抱怨负载,但我没有改变任何东西。”我进去一看,看到一幅经典的画。在过去的 24 小时内,有 6 万个对 wp-login.php 的请求被塞进了 access.log。六万。来自两百个不同的 IP 地址。有人有条不紊地尝试密码——admin、administrator、shop、manager、test、123456——不停地转了一圈。机器人的工作方式就像瑞士手表:每秒三到四个请求,足以不属于主机的原始速率限制保护范围,但足以让服务器因处理 PHP 请求而受阻。
我的第一个本能建议是“安装 Wordfence”。这是一种反射,对吗? WordPress 安全意味着 Wordfence。多年来我自己也是这么认为的。但后来我停下来问自己一个很久以前就应该问的问题:Wordfence 真的是防止暴力破解的唯一方法吗?对于具有特定工作负载和要求的 WooCommerce 商店来说,这真的是最佳方式吗?老实说,我挖得越深,我就越相信对于 WooCommerce 上的商业网站来说,Wordfence 就像用大炮射麻雀一样。是的,你会的。但同时你会毁掉一半的墙。
让我告诉您,在真实的 WooCommerce 项目上与机器人和暴力进行了几年的斗争后,我得到了什么 - 以及为什么在某些时候我放弃了重型通用安全插件,转而采用基于点的内置解决方案。这不是理论上的“十大安全插件”比较——这是拥有一万六千种产品、每天两千名访客、对停机零容忍的工业商店的经验。
为什么 Wordfence 不再是我的默认选择
我并不是说 Wordfence 是一个糟糕的产品。这不公平。 Wordfence 是一个功能强大、成熟、支持良好的工具,拥有庞大的签名数据库。问题是不同的:它被设计为任何 WordPress 网站的通用解决方案,从家庭主妇的博客到公司门户。 WooCommerce 不是“任何网站”。这是一家拥有动态页面、AJAX 购物车、结帐、来自支付系统的 API 请求、来自交付服务的 Webhooks 以及与 1C 同步的商店。当在这一切中间有一个大小超过一百兆字节的插件时,它根据每个请求,根据包含数百万个签名的数据库进行检查 - 乐趣就开始了。
我第一次在一个销售工业润滑油的客户项目中遇到这种情况。他在 WooCommerce 上拥有一家商店,拥有 16000 个职位,与 1C 同步:通过 OData 进行贸易管理、在 Typesense 上搜索、具有三级导航的大型菜单、针对客户群体的 B2B 定价。正常营业的商店。 Wordfence Premium 一年费用为 119 美元,一切都按其应有的样子进行。然后有一天,我们注意到更新 Wordfence 后目录页面的加载时间开始延长一秒半。对于网上商店来说,一秒半就是永恒。我们开始挖掘,发现Wordfence与LiteSpeed Cache冲突。这两个插件都尝试控制 HTTP 标头,都在早期阶段参与请求处理,因此缓存有时会起作用。有些页面是从缓存中提供的,有些则不是,用户看到的站点不是快就是慢。不一致是电子商务中可能发生的最糟糕的事情。
我们花了两天时间设置例外。为 WooCommerce 添加了结帐、购物车、API 端点、AJAX 处理程序的 URL 模式。似乎已经奏效了。一个月后,Wordfence 进行了更新 - 一些例外情况停止工作,因为配置格式发生了一些变化。我们又在浪费时间了。在某个时候我想:等等,Wordfence 到底为我们做了什么我们无法更轻松地实现的事情?
事实证明,在Wordfence的整个庞大武器库中,我们实际上使用了四个功能:暴力保护、阻止可疑IP、表单上的验证码和文件监控。带有 WAF 规则的防火墙很有用。但我们的托管已经具有带有 OWASP 规则集的 ModSecurity。恶意软件扫描程序 - 每月运行一次,从未发现任何内容(因为我们没有安装错误的插件和主题)。双因素身份验证 - 仅为管理员配置。事实证明,我们每年支付 119 美元,并为了更容易实现的功能而遭受缓存冲突。
你知道是什么最终说服了我吗?我查看了插件大小。 Wordfence 及其签名数据库、防火墙、扫描仪和管理面板超过一百兆字节。一百兆字节的 PHP 代码,以某种方式随网站的每个请求一起加载。相比之下,整个 WooCommerce 大约有四十兆字节。也就是说,安全插件比它保护的平台更大。这对于博客来说是可以忍受的。对于拥有数千个同时会话的商店来说,答案是否定的。
还有一点很少被讨论。 Wordfence 在 WordPress 数据库中存储日志、统计数据、扫描数据和防火墙表。在 WooCommerce 商店已经超载的数据库中,我们项目上的 wp_postmeta 重达 937 MB。再添加几个来自 Wordfence 的具有数百万行的表意味着使 MySQL 性能本已不平凡的情况更加恶化。
我并不是说每个人都应该立即卸载 Wordfence。对于许多网站来说,这是一个不错的选择。但是,如果您的 WooCommerce 商店负载很重,需要服务器级缓存和特定集成,那么值得考虑是否有一种方法可以在没有这种重量级的情况下获得必要的保护。剧透:是的。现在我将告诉你我们是如何做到的。
攻击剖析:机器人到底做什么以及他们想要什么
在我们为自己辩护之前,有必要了解我们到底在防御什么。我注意到,许多店主将“站点攻击”视为好莱坞电影中的场景 - 一个戴头巾的黑客疯狂地敲击键盘,绿色字符在屏幕上跑过。事实上,对 WordPress/WooCommerce 网站的攻击百分之九十都是完全自动化的过程。机器人。脚本。屏幕后面没有人。有一个由数千台受感染服务器和物联网设备组成的僵尸网络,有条不紊地爬行数百万个 WordPress 网站,并尝试使用泄露数据库中的密码进行标准登录。
主要目标是获得管理区域的访问权限。不要窃取您的产品或客户群(尽管确实发生了)。大多数情况下,被黑客入侵的 WordPress 被用作中间链接:它们托管网络钓鱼页面,通过电子邮件发送垃圾邮件,安装加密货币挖掘程序,并将访问者重定向到第三方网站。对于 WooCommerce 商店来说,后果是灾难性的:谷歌在几小时内将该网站标记为危险,客户在浏览器中看到红色警告屏幕,销售额降至零。恢复搜索引擎声誉可能需要数周时间。
第一个攻击媒介是通过 wp-login.php 进行暴力破解。标准的 WordPress 登录页面,默认情况下可供全世界访问。机器人发送带有登录密码对的 POST 请求,接收响应,然后发送下一个请求。以每秒三到五个请求的速度,机器人一天可以对数以万计的组合进行排序。如果您的密码是“shop2024”,问题不是您是否会被黑客攻击,而是何时会被黑客攻击。此外,即使机器人没有猜出密码,它仍然会造成伤害:对 wp-login.php 的每个请求都是一个完整的 PHP 会话,连接到数据库、验证凭据并记录在日志中。即使对于一个好的服务器来说,每天六万个这样的请求也是一个严重的负载。
第二个向量是 XML-RPC。这是一种 WordPress 远程协议,是在人们通过桌面应用程序发布博客文章的时代发明的。到 2026 年,大约有 0% 的 WooCommerce 商店所有者使用 XML-RPC。但它被机器人积极使用,因为通过 XML-RPC,您可以在一个请求中发送包含数百个登录密码对的 system.multicall 方法。也就是说,机器人不是敲门一百次,而是敲一次门,同时交出一百把钥匙。许多安全插件通过 wp-login.php 限制登录尝试,但忘记了 XML-RPC - 并且机器人只是切换到此通道。
第三号矢量 - 注册和结账表格。与常规博客不同,在 WooCommerce 商店中,未经授权的用户可以使用开放表单:注册帐户、下订单、反馈表,有时还请求商业报价。机器人使用这些表单有两个目的:垃圾邮件注册(创建数千个虚假帐户)和检查泄露数据库中电子邮件地址的有效性。结帐表单尤其容易受到攻击,因为通过它您可以检查小额交易中被盗的银行卡 - 所谓的卡测试。 PayPal、Stripe、YooKassa 都在解决这个问题,但如果您在结账时没有验证码,那么您实际上是在为机器人提供免费的卡验证工具。
了解这三个向量决定了防御策略。我们不需要具有数百万条规则的通用防火墙。我们需要关闭三扇特定的门 - 并且将它们安全地关闭。
暴力破解保护:智能拦截代替暴力破解
当我开始设计暴力保护模块时,我做的第一件事就是看看 Wordfence 是如何做到的。你知道我理解了什么吗?方法其实很简单。您可以统计某一时间段内从一个 IP 地址尝试登录失败的次数。如果超过限制,您将封锁该 IP 一段时间。这不是火箭科学。但一如既往,问题在于细节,正是细节决定了实现的好坏。
第一个细节是渐进锁定。天真的“五次尝试 - 阻止十五分钟”的实施对于严重的僵尸网络不起作用。机器人只需等待十五分钟即可重新启动。或者切换到其他IP。我们实施了指数封锁:第一组不成功的尝试 - 封锁十五分钟,第二次 - 封锁一小时,第三次 - 封锁四小时,第四次 - 封锁一天。一个 IP 在几个周期后不断尝试猜测密码,最终会被封锁二十四小时。在此期间,僵尸网络通常会切换到其他目标。
第二个细节是不仅按 IP 统计尝试,还按用户名统计尝试。如果有人尝试从一千个不同的 IP 地址输入管理员帐户的密码,即使每个 IP 仅发出一个请求,这仍然是一种攻击。我们分别统计:来自同一 IP 的尝试和同一登录的尝试。超过任何限制都会激活阻止。对于IP,地址被封锁。对于登录,无论 IP 为何,在一段时间内都将禁止使用该名称登录。
第三个细节是即时通知。触发阻止后,管理员会收到一封电子邮件。不是在一小时内,也不是在每日摘要中——立即。该信件指出了被阻止的 IP、国家/地区、尝试次数以及他们试图查找的登录名。这不仅对于反应很重要,对于理解模式也很重要。当您看到一周以来有人尝试从一个区块的 IP 地址以“管理员”登录名登录时,您就会明白有人正在故意攻击您的网站,而不是进行大规模扫描。然后你采取其他措施。
第四个细节是白名单。如果您在办公室有固定IP,则需要将其添加到白名单中,以免不小心屏蔽了自己。这听起来很明显,但我知道有两个案例,商店管理员通过不成功的登录尝试(忘记密码,尝试了五次)封锁了自己的IP,然后无法登录管理区域。使用白名单就不会发生这种情况。我们还在首次设置期间添加了对管理员 IP 地址的自动检测 - 这样他就不会忘记手动添加自己。
所有这些都在 PHP 级别上进行,无需外部依赖项,无需调用云 API,无需千兆字节的签名数据库。有关登录尝试的数据存储在活动日志表中,这是审计所需要的。没有额外的数据库负载 - 每次登录尝试写入一行。 Wordfence 会根据每个请求(DNS 请求或对其 API 的 HTTP 请求)根据云信誉库检查 IP,与此相比,性能差异非常显着。
我长期以来一直在考虑添加与外部 IP 信誉数据库的集成,就像 Wordfence 对其威胁情报源所做的那样。我决定不。实际上,百分之九十五的攻击已经在限制登录尝试的阶段被阻止。剩下的百分之五是有针对性的攻击,IP 信誉数据库仍然无法拯救您,因为攻击者使用不在任何数据库中的纯代理。与外部服务集成的成本是对第三方 API 的依赖、每个请求的额外延迟以及 API 不可用时的潜在问题。
隐藏 URL 和验证码:两个简单的技巧可以解决百分之八十的问题
您知道阻止 wp-login.php 自动攻击的最简单方法吗?删除 wp-login.php。更准确地说,不是删除它,而是将其隐藏在另一个 URL 后面。您的登录页面可以通过 example.com/my-secret-door 访问,而不是标准的 example.com/wp-login.php。当访问 wp-login.php 时,机器人会收到 404。这是一个非常简单的技术,但很多人都低估了它。但徒劳无功。
事实是,绝大多数攻击 WordPress 的机器人都是愚蠢的脚本,它们被硬编码来访问 wp-login.php 和 xmlrpc.php。他们不会解析您的页面以查找登录表单,不会分析 JavaScript,也不会在菜单中查找“登录”链接。他们只需向 wp-login.php 发送一个 POST 请求即可。如果此地址返回 404,机器人就会移至列表中的下一个站点。就这样,攻击还没开始就结束了。
我们非常优雅地实现了自定义登录 URL。当该功能被激活时,管理员设置他自己的slug - 例如,学术、入口、我的登录等等。该插件拦截所有对 wp-login.php 和 wp-admin(针对未经授权的用户)的请求并返回 404。同时,所有内部 WordPress 链接(“注销”按钮、有关更改密码的字母链接、会话过期后重定向)都会自动重写为新 URL。用户没有注意到任何事情,对他来说一切都像以前一样,只是登录地址不同。
在我们的实战项目(一家工业油品商店)中,我们启用了自定义登录 URL,在 24 小时内,我们发现 wp-login.php 的请求数量从 6 万下降到零。从字面上看为零。机器人不断敲击 wp-login.php,收到 404 并离开。服务器上的负载明显减少 - 我们之前观察到的一秒半延迟已经消失。而且这没有单一的防火墙规则,没有签名数据库,没有云服务。
但是隐藏 URL 可以防御自动机器人。如果有人找到您的登录页面并发起有针对性的暴力攻击,那么半自动攻击又如何呢?或者通过 WooCommerce 表单进行垃圾邮件注册?或者通过结帐进行卡测试?这就是验证码发挥作用的地方。
我们支持三个选项:Google reCAPTCHA v2(带有图片的经典“我不是机器人”)、Google reCAPTCHA v3(不可见,评估用户行为)和 hCaptcha(Cloudflare 的替代方案,不依赖 Google)。每个选项都有自己的优点和缺点,选择取决于商店的具体情况。
reCAPTCHA v2 在阻止机器人方面是最可靠的。如果机器人无法点击公交车的图片,则不会通过。缺点是它会惹恼实时用户。在 WooCommerce 商店结账期间,这可能会导致您产生转化费用。买家已经输入了送货地址,选择了付款方式,然后向他展示了十张模糊的照片,并询问“选择所有带有消防栓的照片”。有些人会认为该网站已损坏,其他人则干脆去找竞争对手。
reCAPTCHA v3 解决了这个问题 - 它是不可见的。用户不点击任何东西,不解析任何图片。谷歌分析页面上的用户行为——鼠标移动、表单填写速度、浏览器历史记录——并分配从零到一的分数。高于 0.5 - 很可能是一个人。下面很可能是一个机器人。我们允许您在管理面板中自定义分数阈值,因为不同的表单需要不同的严重级别。要进入管理面板,您可以将阈值设置为 0.7 - 为了安全起见更好。对于结帐 - 0.3,以免失去具有非标准行为的合法买家(例如,使用键盘而不使用鼠标填写表格的买家)。
对于那些根本不想向 Google 提供用户数据的人来说,hCaptcha 是一个有趣的替代方案。工作方式类似,但数据由 Cloudflare 处理。对于有 GDPR 要求的欧洲客户来说,这可能至关重要。
关键点是验证码的准确放置位置。许多安全插件仅将其安装在 wp-login.php 上并认为任务已完成。但 WooCommerce 商店中还有三种更重要的形式经常被遗忘。注册表 - 通过它,机器人创建了数千个虚假帐户。密码恢复表单 - 通过它您可以检查数据库中是否存在特定的电子邮件(该表单对现有和不存在的地址的响应不同)。而结账的形式就是刷卡测试,这个我已经讲过了。我们在所有四个点都设置了验证码:登录、注册、密码恢复、结帐。它是为每个表单单独配置的 - 您可以在结账时启用 v3(不可见),在输入时启用 v2(显式)。
这是我想强调的一个重要观点。验证码不是灵丹妙药。高级僵尸网络可以使用 2Captcha 或 Anti-Captcha 等服务绕过 reCAPTCHA v2,在这些服务中,真人点击图片即可赚取几分钱。 reCAPTCHA v3 可以通过在无头浏览器中模拟人类行为来欺骗。但这一切都需要攻击者付出巨大的努力和资源。爬行数百万个网站的大型机器人不会在您的验证码上花费一毛钱 - 它只会在没有保护的情况下转移到下一个网站。但有针对性的攻击是完全不同级别的威胁,您需要通过其他方式保护自己免受攻击。在这种情况下,验证码是第一行,它可以切断 99% 的自动化垃圾。
这两种技术(隐藏登录 URL 和表单上的验证码)结合在一起解决了 WooCommerce 商店中机器人的绝大多数问题。没有一行防火墙配置,没有云订阅,没有百兆插件。只是针对特定的脆弱点进行纯粹的、有针对性的保护。
XML-RPC:WordPress 最被低估的漏洞
我记得当我了解到 XML-RPC 放大攻击的那一刻。那是大约五年前的事,我由衷地感到惊讶——这在现代世界怎么可能? XML-RPC 是一种传统的 WordPress 协议,允许您通过 XML 请求远程管理您的站点。发布帖子、管理评论、上传文件——所有这些都可以通过 xmlrpc.php 完成。问题在于该文件支持 system.multicall 方法,该方法允许您将多个调用合并为一个请求。攻击者很快就弄清楚了如何使用它。
机器人不是使用不同的密码发送一千个单独的请求(这很容易跟踪和阻止),而是使用 system.multicall 方法发送一个请求,其中有一千个对 wp.getUsersBlogs 的调用,每个调用都有一个唯一的登录密码对。 WordPress 诚实地处理所有数千个调用并返回结果。一个 HTTP 请求意味着一千次密码检查。 wp-login.php 上的任何登录尝试计数器都不会看到这一点,因为攻击来自完全不同的渠道。
但暴力破解也没有那么糟糕。 XML-RPC 还用于另一种类型的攻击 - DDoS 放大。该机器人会使用虚假受害者的返回地址向您的站点发送 XML-RPC pingback 请求。你的 WordPress 会诚实地向受害者的地址发送 pingback 请求。如果机器人同时从数千个受感染的 WordPress 站点执行此操作,受害者就会受到 DDoS 攻击,并且您的站点会在不知情的情况下成为僵尸网络的成员。前景很好,对吧?您的域名被列入黑名单,您的托管服务收到滥用投诉,您甚至不知道发生了什么,直到愤怒的托管服务商写信给您。
解决方案?完全禁用 XML-RPC。到 2026 年,没有 WooCommerce 商店需要此协议。 WordPress REST API 早已取代了所有 XML-RPC 功能 - 并且更安全、更快且具有正常身份验证。 WordPress 移动应用程序?从 5.0 版开始通过 REST API 工作。喷气背包?我很久以前就转向了 REST。通过第三方应用程序发布?休息 API。没有正当理由保持 xmlrpc.php 打开。
我们在两个级别禁用 XML-RPC。在 WordPress 级别 - 通过 xmlrpc_enabled 过滤器,该过滤器返回 false。这会禁用 WordPress 内部的 XML-RPC 请求处理。在 HTTP 级别 - 我们拦截对 xmlrpc.php 的请求并在 WordPress 开始处理它们之前返回 403。第二级很重要,因为即使在被过滤器禁用之后,xmlrpc.php 文件本身仍然可以访问,并且可以在触发过滤器之前处理一些请求。双重保护更可靠。
在生产项目上禁用 XML-RPC 后,我查看日志,发现对 xmlrpc.php 的阻止请求数量平均每天有三到五千个。以前完全由 WordPress 处理的三到五千个请求 - XML 解析、连接到数据库、验证凭据 - 现在在非常早期的阶段就以最小的资源消耗被切断。这不仅仅是安全性,更是性能优化。
IP 管理:当您需要重炮时
隐藏 URL、CAPTCHA 和禁用 XML-RPC 是解决 90% 机器人问题的三个基本里程碑。但有时你需要表现得更强硬一些。有时您会在日志中看到,来自特定范围的 IP 地址不仅有登录尝试,还有对漏洞的系统扫描 - 对 wp-config.php.bak、.env、.git/HEAD、debug.log 的请求。或者您看到特定子网正在为目录页面生成异常流量 - 不是试图登录的机器人,而是复制您的产品目录和价格的爬虫。在这种情况下,就需要IP管理。
我们以两个列表的形式实现它 - 黑色和白色。黑名单完全阻止 IP 地址或整个子网(以 CIDR 格式) - 服务器会对任何请求返回 403。相反,白名单使指定地址免于任何检查 - 对登录尝试没有限制,没有验证码,没有延迟。白名单通常包含办公室的 IP 地址、管理员的家庭连接以及可信服务(1C 服务器、支付系统、交付服务)的地址。
但手动维护黑名单是一项西西弗斯任务。今天您将阻止十个地址,明天攻击将来自另一个僵尸网络,您将不得不再阻止二十个地址。这就是我们添加基于行为模式的自动阻止的原因。如果某个IP地址在一小时内产生超过一定数量的404请求(表明存在漏洞扫描),则会自动将其列入黑名单。如果该IP超过3次登录尝试限制,则会自动阻止。如果请求来自包含 SQL 注入或 XSS 的典型有效负载行的 IP,则立即阻止。所有这些都可以配置,阈值可以更改,因为不同商店的正常行为看起来不同。
在这里我想警告您我自己踩过的一个陷阱。自动 IP 阻止可以阻止位于 NAT 或公司代理后面的合法用户。在一家大公司,数百名员工可以通过一个IP地址访问Internet。如果其中一人多次尝试进入您的商店未成功,整个办公室将被封锁。因此,自动拦截必须谨慎配置:阈值高、首次操作拦截时间短、强制通知管理员。还有大客户 IP 地址的白名单(如果您知道的话)。
一个单独的主题是地理封锁。如果您的商店仅在俄罗斯和独联体国家运营,接受来自印度尼西亚、尼日利亚或巴西的流量是否有意义?统计数据显示,很大一部分僵尸网络位于东南亚、非洲和南美洲国家。封锁整个国家是一种粗糙但有效的工具。我们支持基于 MaxMind GeoIP 数据库按国家/地区进行阻止。您可以阻止特定国家/地区,也可以反转它 - 仅允许某些国家/地区并阻止所有其他国家/地区。对于专门与俄罗斯法人实体合作的 B2B 商店来说,“仅允许俄罗斯和白俄罗斯”选项会切断大量垃圾流量。
但我必须说实话:地理封锁并不是最纯粹形式的安全。更多的是关于卫生。严重的攻击者会花 5 美元在目标国家/地区租用 VPS,并在一分钟内绕过您的地理封锁。地理封锁非常适合对抗不适应特定站点的大规模僵尸网络。这些是大多数。
活动日志:了解网站上发生的一切
我认为有一件事比上面列出的所有保护机制更重要。这是活动日志。对网站上发生的一切进行完整的审计跟踪。谁登录、何时登录、从什么 IP 登录。谁更改了设置。谁更新了插件?谁编辑了产品。谁改了价格?谁删除了用户。
为什么这如此重要?因为安全不仅仅是防止攻击。这也是一种发现。并进行调查。如果您仍然遭到黑客攻击(并且没有 100% 的保护),活动日志可以让您了解:渗透发生的确切时间、通过什么媒介、攻击者设法做什么、哪些数据受到损害。没有日志,您将盲目行动 - 更改所有密码,重新安装所有插件,检查所有文件。通过日志 - 您可以专门纠正受影响的内容。
我将告诉你一个来自实践的真实例子。在一个项目中,我们发现有人更改了 WooCommerce 设置中订单收件人的电子邮件。订单继续到达网站,但通知被发送到第三方电子邮件 - 有人截获了包含客户联系信息的订单。如果没有活动日志,我们可能几个月都不会注意到这个问题。通过日志,我们可以看到设置更改、时间、IP 地址甚至浏览器的用户代理的记录。原来,其中一名员工使用了弱密码,他的帐户被泄露,并且通过他更改了设置。我们重置了密码,启用了双因素身份验证,返回了正确的电子邮件 - 所有这一切都花了一个小时,而不是一周。
我们的活动日志模块将事件记录在单独的自定义表 - wpaic_activity_log 和 wpaic_activity_log_contexts 中。单独的表,而不是 wp_options 或 wp_postmeta,它们已经超载。每个条目包含一个操作类型、一个操作对象(帖子、产品、用户、设置)、旧值和新值、IP 地址、用户代理和时间戳。所有关键操作都会被记录:登录和注销、用户和角色更改、插件和主题更新、WooCommerce 设置更改、产品和价格更改、订单操作、文件更改。
一个重要的细节是存储日志。如果您永远记录所有内容,该表将增长到令人讨厌的大小。我们将日志存储一段可配置的时间——默认为九十天。早于该时间段的条目将通过操作计划程序自动删除。它可以增加到一年,或减少到三十天 - 这取决于您的审计要求。对于处理个人数据的公司(这是任何在线商店)来说,九十天是安全要求和资源节省之间的合理平衡。
我还想强调一点。活动日志不仅仅与安全有关。这也与管理有关。当您有多名经理在一家商店工作时,您想知道谁改变了什么。经理是否不小心重置了热门产品的价格?日志中可见。您的实习生是否删除了重要页面?日志中可见。承包商是否更新了导致结账失败的插件?日志中可见。这不是一个偏执的工具,而是用于正常业务流程管理的工具。
当我向店主展示开机后第一天的活动日志时,他们的反应通常是相同的:“我不知道网站上发生了这么多事情。”确实如此 - 大多数人甚至没有意识到 WordPress 和 WooCommerce 在后台运行了多少自动化流程。瞬时更新、cron 任务、操作计划程序、webhooks - 所有这些都会生成在没有日志的情况下保持不可见的事件。
无需单独插件的一切:为什么内置保护更好
现在让我们讨论一下所有这些机制的共同点以及这种方法与安装 Wordfence 的根本不同之处。所有这些功能 - 强力保护、隐藏 URL、CAPTCHA、禁用 XML-RPC、IP 管理、地理封锁、活动日志 - 均作为一个插件的模块实现,该插件可同时管理您的目录、B2B 定价、搜索、交付以及与 1C 的同步。这不是“十个其他安全插件之上的另一个安全插件”。这是了解您商店的一切的内置保护。
为什么这很重要?因为同一个插件的模块之间不会冲突。安全模块了解 CSS 缓存模块,并且不会干扰其工作。 CAPTCHA 模块了解报价请求表单并自动添加验证。活动日志模块了解 B2B 模块的操作并记录客户组、价格层和子帐户的更改。这是一个单一的生态系统,而不是一组需要单独配置并希望它们不会发生冲突的不同工具。
第二个优势是尺寸和性能。安全模块是几个PHP类,总体积约一百KB。不是兆字节 - 千字节。它不携带百科全书大小的签名数据库,不扫描每个请求的文件系统,也不将数据发送到云端。它完全完成了它需要做的事情,而不是多了一盎司。在配备 LiteSpeed Cache、Redis 和 Typesense 的 WooCommerce 商店中,每一兆字节和每一毫秒都很重要。在请求处理过程中增加一到两毫秒的安全模块与需要二十到三十毫秒的 Wordfence 完全不同。
第三个优势是成本。一个站点的 Wordfence Premium 费用为每年 119 美元。 Sucuri 防火墙 - 两百美元。 iThemes Security Pro - 大约一百美元。如果您有多家商店,请增加数量。内置保护已包含在您已用于管理商店的插件的价格中。无需额外订阅,无需单独的许可证。
第四个加点是单点配置。您无需在 Wordfence 管理、Cloudflare 面板、.htaccess 设置和服务器配置之间跳转 - 您可以在一个地方配置所有内容。已经熟悉的插件管理面板中的“安全”选项卡。强力保护、CAPTCHA、自定义 URL、XML-RPC、IP 列表、活动日志 - 所有这些都在一个屋檐下,具有单一的界面风格和统一的文档。
我听到了反对意见:“但是 Wordfence 有一个包含数千条规则的 WAF,可以防止 SQL 注入、XSS 和其他应用程序级攻击!”正确的。我们还有 WAF - 一个 Web 应用程序防火墙模块,其中包含用于检测 SQL 注入、XSS、路径遍历和其他常见攻击的规则。但我们并不是试图取代 ModSecurity 或与 Cloudflare WAF 竞争。我们正在关闭应用程序层——这一层可以看到服务器端 WAF 可能会错过的 WordPress 特定攻击。这是补充性保护,而不是服务器防火墙的替代品。
我还想谈谈几乎没有人谈论的一方面。当您的网站上有 Wordfence 时,您基本上将商店的安全性信任给第三方公司 Defiant Inc。如果明天他们决定将价格提高到每年 300 美元,您将付费,因为您的整个安全配置都与他们的插件绑定。如果他们关闭免费版本,您将付费。如果他们允许其插件中存在漏洞(并且这种情况已经发生),您的商店将遭受损失。作为核心商店管理插件一部分的内置安全性是控制。您知道它的成本是多少,它是如何工作的,并且您不依赖于单个供应商的定价政策。
我喜欢汽车的比喻。 Wordfence 就像在您的汽车上安装一个独立的铰接安全系统:第三方警报系统、独立的防盗器、外部 GPS 跟踪器、门上的附加锁。每个组件本身都很好,但组合在一起有时会发生冲突——防盗器触发警报、GPS 跟踪器耗尽电池、额外的锁会卡住标准锁。内置安全系统就像一个工厂系统:ABS、ESP、安全气囊、防盗系统——一切都是一起设计的,一切都作为一个整体运行,没有任何冲突。不那么花哨吗?或许。但对于路上百分之九十五的情况来说,这已经足够了。对于剩下的 5%,有 Cloudflare Enterprise 级别的专门解决方案,它们在不同级别上工作并且不会与任何内容发生冲突。
我不希望您将这篇文章视为“Wordfence 是邪恶的,立即删除它”。不会。Wordfence 对于某些场景来说是一个很好的工具。但是,如果您有一个严重的 WooCommerce 商店,具有高负载、服务器级缓存并且需要节省每一毫秒,请考虑一下您是否为可以更便宜、更轻松地获得的功能付出了过高的价格(无论是金钱还是性能)。针对特定攻击向量(暴力破解、XML-RPC、垃圾邮件注册、卡测试)级别的针对性保护,与完整的操作审核相结合,可提供真正的安全性,而不会产生副作用。
尝试启用安全模块、设置自定义登录 URL、向表单添加 CAPTCHA、禁用 XML-RPC - 并查看一天内的日志。我打赌您会看到数以万计的机器人被阻止,并且服务器负载显着减少。然后打开活动日志,看看您的网站上到底发生了什么。这将是既可怕又有益的。可怕 - 因为你会发现有多少你以前没有注意到的。有帮助 - 因为现在一切尽在您的掌控之中。
最后,一条与插件无关的建议。防止暴力破解的最可靠的保护措施是强密码。二十个字符,两种情况下的字母,数字,特殊字符,没有字典单词。这听起来微不足道,但我经常看到营业额数千万卢布的商店,其中管理员密码是公司名称和成立年份。我描述的所有技术保护措施都是减缓攻击者速度并清除机器人的障碍。但是,如果您的密码是“admin2024”,则任何隐藏 URL 和验证码都无法拯救您,因为在前一百次尝试中就会被猜到。强密码加上双因素身份验证加上自定义登录 URL 加上限制登录尝试是四层保护,每一层都使攻击者的任务变得更加困难。同时攻击这四个目标是任何大型僵尸网络都不会浪费资源的任务。它只会转到密码为“123456”并且 xmlrpc.php 打开的下一个站点。别是这个网站。