WordPress 安装中的 5 大安全漏洞

你的 WordPress 网站的安全程度取决于你如何设置它。了解五个最重要的安全事项。

对于 WordPress 安全性的担忧和抱怨由来已久。

如果你需要一个内容管理系统(CMS),并且咨询了非 WordPress 的服务提供商,那么安全性很可能是他们首先提出的质疑。但这是否意味着我们应该放弃 WordPress,转而使用静态站点生成器或其他无头 CMS?

答案是否定的。如同生活中许多真理一样,这个问题也存在多个维度。

WordPress 真的那么不安全吗?

让我们看看一些基于 WordPress 构建的知名网站:

  • TechCrunch
  • 纽约客
  • 英国广播公司美国
  • 彭博社
  • 音乐电视新闻
  • PlayStation 博客

这些拥有大量资金和专业团队的公司为什么没有放弃 WordPress?如果你认为是技术遗留问题,那可能并非如此。对这些品牌来说,数据安全和公众形象远比迁移到其他平台所需的成本(可能不到 20 万美元)更重要。

难道他们的工程师不清楚 WordPress 的安全性,并没有发现其中存在无法解决的根本性问题吗?

我个人也管理过每月有 350 万到 400 万访问量的 WordPress 网站。过去八年中,安全漏洞的总数为零!

所以… WordPress 安全吗?

如果这听起来像是在回避问题,我对此感到抱歉,但这确实是我的答案:

之所以这么说,是因为像生活中的许多真理一样,答案很复杂。要得到合理的答案,我们首先需要理解,WordPress(或者任何预先构建的 CMS)并不是一个可以永久固定好的橱柜,一劳永逸。

它是一个复杂的软件,依赖于许多组件:

  • PHP,它是 WordPress 构建的语言
  • 安装 WordPress 的可公开访问的服务器
  • 用于处理访问者的 Web 服务器(如 Apache、Nginx)
  • 正在使用的数据库(MySQL/MariaDB)
  • 主题(包含 PHP、CSS 和 JS 文件)
  • 插件(包含 PHP、CSS 和 JS 文件)
  • 以及更多,取决于你的安装目标

换句话说,任何这些组件出现漏洞,都会被认为是 WordPress 的安全漏洞。

如果服务器的 root 密码是 admin123 并且被泄露,这算是 WordPress 的安全漏洞吗?

如果 PHP 版本存在漏洞,或者你购买并安装的新插件包含明显的安全漏洞呢?总而言之,如果任何子系统出现故障,都会被视为 WordPress 的安全问题。

请不要误会,这并不意味着 PHP、MySQL 和 Apache 本身就不安全。任何软件都可能存在漏洞。在开源环境中,漏洞的数量可能会很多(因为它对所有人开放,可以查看和分析)。

有人说“安全”吗?😛

从上面的分析我们可以得出结论:

没有绝对的安全或不安全。不同组件构成了一条链条,而链条的强度取决于其中最薄弱的环节。历史上,WordPress 被贴上“不安全”标签,主要是因为使用了旧版本的 PHP、共享主机,以及安装来自不可靠来源的插件/主题。

同时,一些常见的疏忽也会让你的 WordPress 网站很容易受到攻击者的攻击。这正是本文要讨论的内容。所以,废话不多说(和循环论证),让我们开始吧。

黑客可以利用的顶级 WordPress 漏洞

WordPress 数据表前缀

著名的 5 分钟安装是 WordPress 最好的功能之一,但和所有安装向导一样,它也让我们变得懒惰,并且保留了默认设置。

这意味着你的 WordPress 数据表的默认前缀是 `wp_`,导致数据表的名称容易被猜测:

  • wp_users
  • wp_options
  • wp_posts

现在,考虑一种叫做 SQL 注入的攻击,恶意数据库查询被巧妙地插入并使之在 WordPress 中运行(注意,这绝不是 WordPress/PHP 特有的攻击)。

虽然 WordPress 具有处理这类攻击的内置机制,但没有人能保证它不会发生。

因此,如果攻击者成功执行了类似 `DROP TABLE wp_users; DROP TABLE wp_posts;` 这样的查询,你的所有账户、个人资料和帖子将在瞬间被删除,无法恢复(除非你有备份,但即使这样,也会损失上次备份之后的数据)。

在安装过程中简单地修改前缀是一件非常重要的事情(而且毫不费力)。

推荐使用像 `sdg21g34_` 这样随机的字符串,因为它毫无意义并且难以猜测(前缀越长越好)。最棒的是,这个前缀不需要你记住。WordPress 会保存它,你永远不需要再担心它了(就像你不需要担心默认的 `wp_` 前缀一样!)。

默认登录网址

你怎么知道一个网站是用 WordPress 构建的?一个明显的线索是,当你将“/wp-login.php”添加到网站地址时,你会看到 WordPress 登录页面。

例如,以我的网站(http://ankushthakur.com)为例。它是用 WordPress 构建的吗?只需加上登录部分。如果你觉得懒得自己尝试,结果会是这样的:

¯\_(ツ)_/¯

没错,它是 WordPress 网站。

一旦知道了这一点,攻击者就可以开始他们的攻击了。真可怜!

解决方案是修改默认的登录 URL,只让信任的人知道它。

例如,这个网站也是用 WordPress 构建的,但如果你访问 http://techblik.com.com/wp-login.php,你会失望而归。登录 URL 是隐藏的,只有管理员知道?

修改登录 URL 并不复杂。你可以使用这个插件

恭喜你,你刚刚为防止暴力破解攻击添加了另一层保护。

PHP 和 Web 服务器版本

我们已经讨论过,每个已经编写(和正在编写)的软件都充满了等待被利用的漏洞。

PHP 也不例外。

即使你使用的是最新版本的 PHP,也不能保证不存在漏洞,而且这些漏洞可能随时被发现。解决方案是隐藏你的 Web 服务器发送的特定标头(没听说过标头?请阅读这篇文章!),当浏览器连接到服务器时:x-powered-by。

如果你查看你最喜欢的浏览器的开发者工具,你会看到类似这样的信息:

正如我们在这里看到的,该网站告诉我们它运行在 Apache 2.4 上,并且使用 PHP 5.4.16 版本。

这已经向攻击者提供了大量信息,帮助他们缩小攻击范围。

这些(以及类似的)标头需要隐藏。

幸运的是,这可以很快完成;不幸的是,这需要一些技术知识,因为你需要深入了解系统内部并修改重要的文件。因此,我建议你请你的网站托管服务提供商来完成这项工作;如果他们做不了,你可以找一位顾问,但这很大程度上取决于你的网站托管商是否允许这样做。

如果不行,也许是时候更换托管服务商,或者迁移到 VPS 并聘请顾问来解决安全和管理问题。

这值得吗?只有你能决定。🙂

哦,如果你对安全标头感兴趣,这里是你的解决方案!

登录尝试次数

黑客最古老的技巧之一是所谓的 字典攻击

它的原理是,尝试大量的密码组合(甚至数百万种),直到其中一个成功。由于计算机运行速度非常快,这种简单的方法非常有效,可以在合理的时间内得到结果。

一种常见(且非常有效)的防御方法是在显示错误之前添加延迟。这会使接收者等待,如果这是黑客使用的脚本,则需要很长时间才能完成。这就是为什么你的电脑或应用会短暂卡顿,然后显示“密码错误!”。

无论如何,关键是,你需要限制 WordPress 网站的登录尝试次数。

当尝试次数超过设定值(例如五次)时,账户应该被锁定,并且只能通过账户持有人的电子邮件恢复。

值得庆幸的是,你可以使用这个插件

HTTP 与 HTTPS

你的托管服务商一直建议你安装 SSL 证书,这比你想象的更重要。

浏览器中显示的“安全”绿色锁形图标不仅仅是一个信誉标志;安装 SSL 证书并强制所有 URL 使用“https”足以将你的网站从一本打开的书变成一本神秘的卷轴。

如果你不明白这是怎么回事,请了解一下 中间人攻击

拦截从你的电脑流向服务器的流量的另一种方法是数据包嗅探,这是一种被动的数据收集形式,甚至不需要将自己置身于中间。

对于通过纯“HTTP”运行的网站,拦截网络流量的人可以看到你的密码和信用卡号码以纯文本形式显示。

资料来源:comparitech.com

害怕了吗?应该害怕!

但是,一旦你安装了 SSL 证书并且所有 URL 都转换为“https”,这些敏感信息将显示为乱码,只有服务器才能解密。换句话说,不要省那一点钱,每年花几美元买个安心。🙂

结论

控制以上五点就能很好地保护你的网站了吗?

完全不是。正如无数安全文章所说,你永远不可能 100% 安全,但是通过合理的努力,你可以消除很多问题。你可以考虑使用 SUCURI 云 WAF 来全面保护你的网站。