WordPress 安全防护:值得遵循的先后顺序
搜索“WordPress 安全防护”的人,会找到列有二十项的清单。问题不在于这些条目有错,而在于它们被不分轻重地并列在一起。前三项的作用,胜过其余十七项的总和。
第 1 位:更新,而且要及时
大多数被接管的网站,并不是倒在精心设计的攻击之下,而是倒在某个插件的已知漏洞上——而修补它的更新几周前就已发布。自动化的大规模扫描找的正是这类漏洞。
实际操作上这意味着:安全更新自动安装,功能更新经简短检查后手动安装——并且每次更新前都创建还原点,免得因为害怕更新出问题而一再推迟。
一个两年没有更新过的插件,即使还能用,也是一个风险。顺便清理一下:不用的插件应当删除,而不是停用。
第 2 位:登录
第二常见的入口是密码。四项措施,按以下顺序进行:
- 限制失败尝试——让自动化的猜测尝试失去基础。
- 强制密码强度,至少对所有有权发布内容的人如此。
- 启用第二个验证因素,至少为管理员启用。
- 不设用户名为“admin”的账号,也不赋予任何高于所需的角色。
迁移登录地址算是第五项,但作用较弱:它能挡住大规模扫描、减轻负载,却替代不了上面四项中的任何一项。使用这一功能的人,应当在保存之前记下新地址。
第 3 位:安全加固——设置一次,之后就不用管了
- 关闭后台的文件编辑功能——恶意代码最常通过那里被植入
- 在没有任何功能需要时关闭 XML-RPC
- 禁止目录列表
- 禁止在 uploads 文件夹中执行 PHP
- 限制通过 REST API 枚举用户
- 设置安全响应头
这些开关在运行中不产生任何开销,每一个都堵上一条已知的捷径。它们是整张清单中投入产出比最高的部分。
第 4 位:察觉变化
从这里开始,重点不再是预防,而是察觉。有两件事值得做:
核心比对会将 WordPress 文件与 api.wordpress.org 的校验和进行比较。核心文件被改动是一个非常明显的信号——没有人有正当理由去改动那里的内容。
文件守卫会记录一份基准,并报告与之不符的地方。它的可靠程度取决于记录基准的时机:在被入侵之后才记录的基准,会把恶意代码认定为正常状态。
在网站经证实干净的时候记录基准——最好是在全新安装之后,或者在经过检查的恢复之后立即进行。
第 5 位:防火墙和扫描
两者都有意义,而且都是有意排在这么靠后的位置。PHP 中的防火墙要等 WordPress 已经启动后才运行——它无法替代 Web 服务器之前的防火墙。扫描找到的是与其模式相似的内容,而不是所有恶意代码。
比规则数量更重要的,是如何处理误报。概览一直显示红色的工具,已经起不到任何保护作用——它只是在训练人随手点掉提示。因此,先让防火墙只报告、运行一周,并查看日志,然后再让它进行拦截。
常被排在最前面、却不该排在那里的措施
| 措施 | 为何被高估 |
|---|---|
| 隐藏 WordPress 版本号 | 攻击者直接去试探漏洞就行了 |
| 迁移登录地址 | 能挡住扫描,但替代不了强密码 |
| 大量防火墙规则 | 规则越多,误报越多,保护并不会更多 |
| 有安全插件却没有备份 | 被入侵之后,重要的是退路,而不是警报 |
几乎所有清单都遗漏的一点
安全插件用于防止事故,备份则能让你挺过事故。如果必须二选一,应该选备份——它是唯一一项在其他所有措施都失效后仍然有用的措施。