如何检查您的 WordPress 系统是否受到 XSS 攻击的保护

已发表: 2016-07-09

在全球范围内,近 48% 的网站易受跨站脚本 (XSS) 攻击。 在全球范围内,几乎正好有 25% 的网站使用 WordPress 平台。

由此可见,在易受 XSS 攻击的网站和运行 WordPress 平台的网站的维恩图中,重叠一定是相当大的。

这不是对平台本身的敲门声。 WordPress 团队已将安全性作为其使命宣言的一个组成部分,并在漏洞被发现时积极修补漏洞。但这并不能阻止人们编写不安全的主题或安装不安全的插件。 这些问题是 WordPress 网站 XSS 攻击的两个主要入口,本文将讨论如何阻止它们。

跨站脚本简介

首先,让我们讨论一下 XSS 攻击是如何进行的。 有不止一种类型的 XSS 攻击,所以我将从一个简化的定义开始。 通常,XSS 攻击始于未经处理的输入——评论表单、评论框、搜索栏等。这些攻击的复杂程度差异很大。实际上,WordPress 用户每天都会看到最简单的 XSS 攻击形式:垃圾评论。 你知道我在说什么:“感谢这篇出色的文章。 顺便说一句,这是我在家工作每周赚 5,000 美元的网站:www.only-an-idiot-would-click-this-link.co.uk。

在某种程度上,垃圾评论是 XSS 攻击的完美例子。 恶意实体会破坏您网站的基础架构(评论框),将其内容(恶意链接)放到您的网站上。 虽然这是一个很好的说明性示例,但更真实的 XSS 攻击会更加微妙。 垃圾评论需要大约五秒钟的时间来创建。 XSS 攻击是一个适当的黑客会花费更多时间的事情。

spam as visitor comments

真正的黑帽会尝试利用您网站的所有方面,将数据提交到服务器,本质上将它们用作微型文本编辑器。 如果您的输入没有受到保护,这意味着他们可以从字面上获取他们的代码并强制您的应用程序运行它并在用户的浏览器中呈现(并且可以包括您的浏览器)。 与垃圾评论不同,只有对您网站的修改代码进行详细检查或通过网站交互进行梳理才能发现违规行为。 正如人们可能想象的那样,这种违规行为可能导致的令人不快的事情数不胜数。

简单的破坏行为是 XSS 攻击的一个相对常见的结果,导致您的用户在您的内容的位置显示出怪诞的图像或政治宣传。 很少有长期计划或道德问题的营销人员会使用它们违背他们的意愿向人们做广告。更细微和微妙的攻击可能会窃取您用户的登录凭据。 如果其中一个拥有管理员权限,那么您存储在您网站上的任何个人信息都可能会被抢购一空。 或者,他们可能会使用最初的 XSS 攻击作为撬开您的网站并安装更高级恶意软件的杠杆。

停止攻击

如果您是一个相当精通代码的人,并且您是一个相对较小的 WordPress 站点的唯一所有者,那么安全编码实践可能是锁定您的站点免受跨站点脚本攻击的最佳方法。 我包含此警告是因为如果您是运行更复杂应用程序的大型组织的一部分,那么您可能无法找到恶意攻击者可能注入代码的每个区域。 现代网站的规模可能很大,您可能应该聘请经验丰富的专业人士并将时间花在其他追求上,以使您的网站更好地为您的读者服务。

另一个警告是,如果您不是特别精通代码并且让其他人为您构建您的网站,那么不要假设他们使用了安全编码实践。 众所周知,即使是最有经验的开发人员也会将安全性搁置一旁,或者在没有其他人检查他们的工作的情况下犯一些小错误。其他开发人员可能根本不知道他们在安全方面做了什么,而其他开发人员仍然会掩盖安全性以节省自己的时间(尽管在这方面缺乏专业精神)。 总之,请确保您聘请一位在开发和保护您的网站时不会偷工减料的知名专业人士。

表达了这种担忧,为了防止跨站点脚本,您可以做的第一件也是最简单的事情之一就是验证用户数据。

假设您的网站上有一个注册表单,该表单要求用户输入他们的姓名。 恶意用户可能会键入以下内容:

[xhtml]
<script>CoughUpYourPreciousData();</script>
[/xhtml]

例如,这可能会导致下一个访问该页面的人将其 cookie 的副本发送给攻击者。

你可以看到在这个例子中,上面的代码字符串看起来不像某人的名字。 您的服务器不知道这一点,但是通过使用一些设置参数,您可以教它。 例如,您可以告诉该字段拒绝特殊字符,例如 <>、() 和 ; (评论部分并不特别需要它们)。 您可以告诉该字段一个人的姓名中可能没有数字。 如果您愿意有点严厉,您可以告诉该字段拒绝长度超过 15 个字符的输入(或者您可以根据需要更改值)。 采取这些步骤将大大限制攻击者对特定领域的破坏程度。

Stopping Attacks

即使使用数据验证,您也可能无法实际限制正在使用的字符类型的表单或字段,例如在联系表单或评论字段中。 您可以做的是清理数据。 此过程使 HTML 无法在给定字段中执行,将所有可识别为可执行代码的内容转换为非编码字符。 例如,超链接不会出现在原本可能有的地方。

最后,在某些情况下,您的网站最终可能会显示对用户不安全的数据。 假设有人在您的某个页面上写了一条恶意评论,该评论随后被您网站的搜索功能编入索引。 每当您的用户执行搜索时,该恶意代码就会在其浏览器加载搜索结果时执行。 这可以通过转义数据来防止,这可以确保当您的站点向用户提供数据时,唯一运行的代码就是您要运行的代码。

有关数据验证、清理数据和转义数据的更多信息,WordPress Codex 有一个很好的资源。 它将详细解释上述概念,并提供更多可以普遍应用的示例。

其他方法

大公司有更大的网站; 这是事实。 也许每天有成千上万的人使用您的网站。 也许除了标准的表单和字段之外,还有动画、各种门户、用 Java 编写的部件等等。 即使您跟踪所有这些,也许您的一个应用程序中有一个零日,您无法为自己辩护。

在这种情况下,如果您有足够的影响力和预算来这样做,我建议您投资购买 Web 应用程序防火墙 (WAF)。 一个好的 WAF 将具有自动识别和阻止最常与代码注入攻击相关联的 HTML 字符串的关联规则。 他们还可以在应用程序开始泄露数据时通知您,而这些数据不应该或以不寻常的数量进行,从而有助于防御零日攻击和其他高级威胁。 WAF 不是灵丹妙药,但对于希望保护复杂应用程序的安全专业人员和网站所有者来说,它是一种宝贵的工具。

还有一些插件声称可以防御 XSS 攻击。 我其实不推荐这些。 许多这些插件并没有降低风险,而是代表了黑客可以利用的另一个攻击面。 即使是最知名和最广泛使用的安全插件之一,Akismet,去年也被发现容易受到 XSS 攻击。 在转移 XSS 攻击时,不要半信半疑。 培养必要的技能并使用适当的工具集来确保您的网站安全。

其他实际应用

对于外行来说,这些信息可能有点复杂,但我不希望人们因这些信息的潜在复杂性而气馁。 如果发生 XSS 攻击,您可以肯定,清理此类事件的后果将远比在您的网站上进行更改复杂得多。 清理您网站的声誉成本(普通读者很容易逃离您的网站)将是您不想担心的另一个问题。

即使您要让其他人为您处理您的网站开发和安全问题,也要尽您所能至少能够应对紧急情况并知道您的弱点在哪里。 从长远来看,知道如何检查您的系统将是一项至关重要的技能,并成为其他安全主题和网站开发项目的基础。 一切都是在线互联的,虽然 XSS 攻击可能是过去几年的事情(尽管这不太可能),但了解您网站的来龙去脉永远不会过时。

最后的想法

互联网安全格局不断变化。 您永远无法完全确定 XSS 攻击可能如何出现或如何被用来对付您,但您应该为自己和您的读者确保您正在尽一切力量阻止它们。 不断了解这种威胁,并定期(我建议至少每月一次)检查网络安全领域的任何相关发展。

这也不意味着您可以忽略其他威胁。 公共网络访问仍然需要使用 VPN 才能安全。 您不能忽视用于访问您网站的任何计算机的安全性。 登录信息仍然需要经常更改,并避免暴力攻击。 XSS 攻击是残酷的,但它们并不是唯一需要注意的威胁。

您还可能应该与您的同行和感兴趣的各方分享这些信息(甚至这篇文章),以传播对这些类型攻击的抵抗力。 虽然您自己可能无法做太多事情,但如果有足够多的人正确保护自己,我们可能会看到这些类型的攻击普遍减少,因为黑客试图找出另一种从可怜的互联网用户中获利的方式。

您自己对如何检查 XSS 攻击以及将来如何防御它们有任何想法吗? 您自己是否有任何其他检测和删除策略来对抗这种威胁? 您有什么工具可以推荐给其他读者吗? 如果是这样,请在下面发表评论,并继续与您的读者同行进行这一重要对话。