SQL 注入:WordPress 用户指南
已发表: 2021-05-26如果您认真对待网站的安全性,那么是时候了解 SQL 注入的危险以及如何应对它们了。
术语 SQL 注入(也称为 SQLi)是指一种网络攻击技术,它是黑客入侵各种网站(包括将 WordPress 作为其内容管理系统运行的网站)的常用方法。
在本指南中,我们将详细解释 SQL 注入攻击是什么样的,以及避免这种攻击所需采取的确切步骤。 让我们来看看。 您将了解这些攻击的工作原理、防御它们为何如此重要,以及这些漏洞的真实示例。 让我们潜入吧!
简介:了解 SQL
小号tructured Q uery大号anguage,或“SQL”(发音类似单词“续集”)是一个关系数据库管理系统。 它于 1974 年发明,是第一种在计算机系统上存储和检索多种类型数据的简单方法。
从那时起,该语言的流行度猛增,如今仍在许多内容管理系统 (CMS) 中使用,例如 WordPress。 在该语言在科学研究界流行后不久,现在臭名昭著的 SQL 注入问题就出现了。
在 WordPress 等系统中,许多操作使用 SQL 查询来检索和存储数据。 这些 SQL 查询是由开发人员编写的,并非设计为具有可塑性。
不幸的是,自从 SQL 出现以来,SQL 注入攻击一直是使用这种类型数据库(如 WordPress 数据库)的系统的一个长期问题。 使用优质的 WordPress 安全插件当然可以帮助降低遭受毁灭性攻击或破坏的风险。 然而,正如 GI Joe 所说,对于任何形式的网络攻击,“知道是成功的一半”。
什么是 SQL 注入 (SQLi)?
简而言之,SQL 注入 (SQLi) 是一种攻击,它允许黑客利用易受攻击的 SQL 查询来运行他们自己的查询。 当攻击者能够在服务器上运行他们自己的 SQL 时,就会发生 SQL 注入。您会注意到 SQL 注入在技术出版物中通常被称为“SQLI”或“SQLi”。 请记住,这些攻击可能发生在任何使用 SQL 或 SQL 的派生类来管理数据的系统上。 由于在 WordPress 平台上运行的站点数量庞大,因此对 WordPress SQL 注入进行了充分的研究和记录。
让我们来看看这些攻击的更多技术支出。
SQL注入定义
根据定义,SQL 注入的意图始终是恶意的,它通常旨在实现以下三个目标中的一个或多个:
- 未经授权的数据检索——在 SQL 中,SELECT 命令用于抓取数据。 如果攻击者能够成功操纵基于 SELECT 的查询,他们将能够“转储”数据库的内容。 这就是为什么使用不应公开的信息对所有数据库进行加密至关重要的原因。
- 数据修改- 在其他情况下,WordPress SQL 注入的目标可能是更改数据库中的条目。 这通常用于分配他们通常不会拥有的特定帐户或一组帐户权限。
- 拒绝服务 (DoS) – DoS 攻击是指恶意用户使合法用户更难访问您的站点或服务。 SQL 中删除数据的常用命令就是 DELETE。 攻击者经常大量删除数据库内容,使目标站点无法访问或无法使用。
快速提示:定期备份您的网站!
许多经验丰富的开发人员保留他们为 WordPress 站点编写的所有 SQL 的服务器外副本。 以 .sql 文件的形式,这些可以与 WordPress 备份插件结合使用,以确保即使攻击者可以阻止您的安全,您也可以在很短的时间内恢复。 像 BackupBuddy 这样的 WordPress 备份插件可以备份整个 WordPress 数据库和 WordPress 安装中的任何其他文件。

SQL注入攻击类型解释
既然我们已经探讨了一些基于 SQL 的攻击可能造成的损害,现在是时候探索注入的更多技术方面了。 您应该了解一些重要的注入类型子集。
经典 SQL 注入 (SQLi)
最常见的注入类型,经典版本是攻击者提前知道SQL代码。 这也恰好是 WordPress 上最常用的注入类型; 由于 WordPress 是开源的,公众可以访问其所有组件,包括其 SQL 查询。
稍后我们将进入实际示例,但通过这种形式的注入,攻击者经常操纵查询来“取消”查询的第一部分。 然后,他们可以插入一个自定义查询,服务器将像原始开发人员编写它一样运行该查询。
SQL 盲注 (SQLi)
与经典版本不同,当攻击者无法访问 SQL 代码而只需要进行有根据的猜测时,就会发生 SQL 盲注入。 此外,这种类型需要比传统 SQLi 多得多的技能,因为成功攻击的结果不会显示给攻击者。
话虽如此,有许多程序可以帮助恶意用户自动一点一点地获取他们的结果。
复合 SLQ 注入 (SQLi)
这种形式的攻击是将单独的攻击与 SQLi 结合以获得所需的结果。 三个子组中最复杂的一个,攻击者必须执行一个漏洞利用,允许他们执行无法单独运行的 SQLi。 在这种类型的攻击中,最常伴随 SQLi 的漏洞是身份验证漏洞、分布式拒绝服务 (DDoS) 攻击、DNS 劫持和跨站点脚本攻击。
为什么 WordPress 网站容易受到 SQL 注入攻击?
WordPress 很容易受到某些 SQL 注入的攻击,因为它被广泛使用(现在占所有网站的 40%!)并且已经存在了一段时间(自 2003 年以来)。 WordPress 基于 PHP,一种旨在与 MySQL 轻松集成的服务器端编程语言。
WordPress 使用 SQL 数据库来存储几乎所有内容,从评论到帖子到帐户再到电子商务信息。 绝大多数 WordPress SQL 注入尝试都是针对将数据提交给包含攻击者希望利用的 SQL 查询的 PHP 脚本的表单。
这不是设计缺陷,而是 WordPress 设计方式的副作用。 请记住,几乎所有在“网络时代”之前和之前开始的设计都没有考虑到安全性。 事实上,现已停产的Phrack网络杂志是第一个在 1998 年 12 月号中讨论 SQLi 的公共资源。
尽管最初的 SQLi 漏洞几乎从未在像 WordPress 这样的现代 CMS 上起作用,但多年来攻击者已经变得狡猾了。 我们将看一个简单的示例,说明 SQLi 在完全不受保护的网站上的外观。 然后,我们将向您展示如何查看各种 WordPress 版本的现有漏洞利用。
关于 SQL 注入的重要警告
在我们继续之前,还有一个更重要的说明,我们想说清楚,以帮助您在 WordPress 和网络安全联合之旅中保持正轨!
保持您的 WordPress 版本更新是抵御 SQLi 漏洞的最佳防御措施之一。 即使这意味着暂时破坏一些插件,对于您的站点安全来说也是值得的。SQL注入示例
既然我们已经摆脱了这些免责声明,让我们看看 SQLi 示例。 为了理解这些,您需要了解一些 SQL 术语。 SQL 使用诸如 SELECT 之类的命令来获取数据、使用 DROP TABLE 来完全销毁数据库中的表、使用 DELETE 从表中删除行等。 此外,'*' 字符在 SQL 中表示“全部”。
SQL 中最基本的查询是:SELECT * FROM TABLE_NAME。 这意味着从名为“TABLE_NAME”的表中打印出所有数据。 当您将数据提交到登录表单时,它会通过 PHP 脚本运行,该脚本将您的凭据与用户表进行匹配。 在我们的示例中,我们假设我们在网络安全方面非常糟糕,并且有一个完全未加密的明文表,其中包含名为 USER 和 PASS 的列。
准备查询
在我们安全性非常差的数据库中,包含用户名和密码的表称为 BADLY_DONE_TABLE。 验证用户登录的查询很简单:SELECT * FROM BADLY_DONE_TABLE WHERE USER = '[username from form]' AND PASS = '[password from form]'。
如您所见,我们说的是获取用户的“列表”,如果输入到表单中的用户名和密码匹配,则该列表应该只有一个。 SQL 还允许在条件语句中使用关键字 OR,例如您在我们的查询中看到的 AND。
现在,是时候制作我们的漏洞利用程序了。
利用我们未受保护的 SQL 查询
如果我们的用户名和密码匹配,我们的查询设置为返回用户。 请记住,单引号将结束字符串,我们可以输入“Blahblahblah”作为我们的用户名,然后输入'OR'1'='1。
我们正在利用这样一个事实,即我们的查询是动态形成的,并且输入在执行之前没有“净化”。 本质上,我们是说如果数字“1”等于数字“1”(令人惊讶的是,它确实如此!),然后从表中转储所有内容,无论我们输入的凭据是否正确。
在 1998 年,这会奏效。 现在,通常需要更多的 SQL 和 SQLi 技能来制作 WordPress 的工作漏洞。
SQL 注入和 WordPress 网站
我们之前的示例不适用于现代 WordPress 站点,除非站点管理员竭尽全力禁用任何和所有安全措施。 但是,使用相同的原理,黑客仍然会创建 SQLi 漏洞并将其出售给其他恶意用户。
由于 WordPress 是开源的并且背后有一个庞大的开发社区,因此许多安全研究人员经常在黑客之前发现这些漏洞。 然后他们将它们报告给 WordPress 团队,漏洞被修补。 在某些不幸的情况下,黑客首先找到漏洞利用,使其“在野外”,迫使 WordPress 团队尽快进行快速修复并将其作为更新发布。
如果您有兴趣查看 WordPress 当前和以前的注入漏洞,您可以查看 CVE 数据库。 这包含安全威胁索引,包括产品名称、受影响的版本以及漏洞利用工作原理的一般描述。 您在列表中找到的几乎所有漏洞都已修补,但它们非常适合用作学习材料。
SQL注入预防
阅读本文后,您可能想知道如何确保您的 WordPress 站点不会成为 SQLi 攻击的下一个受害者。 好消息是,您无需成为安全专家即可保护自己免受 SQLi 攻击!
- 对于您编写或从其他站点获取并安装的任何 PHP 文件(特别是 WordPress 插件),请务必小心。 它所需要的只是一个制作精良的 PHP 脚本,它不会清理用户输入以破坏您的 WordPress 网站。
- 使用著名的安全监控插件(如 iThemes Security Pro)来提醒您,以防有人试图对您的网站进行这种攻击,以便您可以提前阻止它。
- 最重要的是,您应该始终将 WordPress 网站更新到最新版本。 许多网站所有者出于某种原因推迟更新,这就是绝大多数数据泄露的原因。
- 保持您的 WordPress 插件和主题更新。 我们不能说得够多了。 易受攻击的主题和插件是 WordPress 网站被黑的第一大原因。
防止 WordPress SQL 注入的 5 个步骤
1. 下载并安装 iThemes Security Pro 插件
要开始保护您的站点,请下载并安装 iThemes Security Pro 插件。
立即获取 iThemes Security Pro
2. 激活版本管理以保持 WordPress 核心、插件和主题更新
简而言之:如果您在网站上运行过时版本的 WordPress、插件和主题,您将面临遭受攻击的风险。 版本更新通常包括针对代码中安全问题的补丁,包括 SQL 注入和远程代码执行 (RCE) 漏洞,因此始终运行 WordPress 网站上安装的所有软件的最新版本非常重要。

更新一旦可用,就会出现在您的 WordPress 仪表板中。 练习运行备份,然后在每次登录 WordPress 站点时运行所有可用更新。 虽然运行更新的任务可能看起来不方便或令人厌烦,但这是一项重要的 WordPress 安全最佳实践。

很难跟踪每个已披露的 WordPress 漏洞——我们会在我们的 WordPress 漏洞综述中跟踪并分享它们——并将该列表与您在网站上安装的插件和主题的版本进行比较。 但是,这并不能阻止 WordPress 黑客针对具有已知漏洞的插件和主题。 在您的网站上安装具有已知漏洞的软件可为黑客提供接管您网站所需的蓝图。
iThemes Security Pro 插件中的版本管理功能允许您自动更新 WordPress、插件和主题。 除此之外,当您运行过时的软件并扫描旧网站时,版本管理还可以选择加强您的网站。
要开始使用版本管理,请在安全设置的主页上启用该模块。

现在单击配置设置按钮仔细查看设置,所有这些设置都是为了保护您的站点。

- WordPress 更新– 自动安装最新的 WordPress 版本。
- 插件更新- 自动安装最新的插件更新。 启用此设置将禁用 WordPress 自动更新插件功能以防止冲突。
- 主题更新- 自动安装最新的主题更新。 启用此设置将禁用 WordPress 自动更新主题功能以防止冲突。
- 运行过时软件时加强站点 - 当一个月未安装可用更新时,自动为站点添加额外保护。
- 扫描旧的 WordPress 站点– 每天对旧的 WordPress 站点的托管帐户进行扫描,这可能允许攻击者破坏服务器。 一个存在漏洞的过时 WordPress 站点可能允许攻击者破坏同一托管帐户上的所有其他站点。
- 修复漏洞时自动更新- 此选项与 iThemes Security Pro 站点扫描协同工作,以检查您的网站是否存在已知的 WordPress、插件和主题漏洞,并在可用时应用补丁。
3. 扫描您的站点以查找易受攻击的插件和主题
iThemes Security Pro Site Scanner 是另一种保护您的 WordPress 网站免受所有软件黑客攻击的首要原因的方法:过时的插件和具有已知漏洞的主题。 站点扫描程序会检查您的站点是否存在已知漏洞,并在可用时自动应用补丁。
检查的 3 种类型的 WordPress 漏洞
- WordPress 漏洞
- 插件漏洞
- 主题漏洞
要在新安装时启用站点扫描,请导航到 iThemes Security Pro 设置并单击站点扫描设置模块上的启用按钮。

要触发手动站点扫描,请单击位于安全设置右侧栏的站点扫描小部件上的立即扫描按钮。

站点扫描结果将显示在小部件中。

如果站点扫描检测到漏洞,请单击漏洞链接以查看详细信息页面。

在站点扫描漏洞页面上,您将看到是否有针对该漏洞的修复程序。 如果有可用的补丁,您可以单击“更新插件”按钮在您的网站上应用此修复程序。
在补丁可用和 iThemes 安全漏洞数据库更新以反映修复之间可能存在延迟。 在这种情况下,您可以将通知静音,以便不再收到与漏洞相关的任何警报。
4. 激活文件更改检测
快速发现安全漏洞的关键是监控您网站上的文件更改。 iThemes Security Pro 中的文件更改检测功能将扫描您网站的文件,并在您的网站发生更改时提醒您。
您会在日志中看到新的文件更改活动有几个合理的原因,但是如果所做的更改是意外的,您应该花时间确保更改不是恶意的。 例如,如果您在更新插件的同一日期和时间看到对插件所做的更改,则没有理由进行调查
要开始监视文件更改,请在安全设置的主页上启用文件更改检测。

一旦文件更改检测已启用,安全的iThemes Pro将开始扫描所有网站的文件的块。 分块扫描文件将有助于减少监视文件更改所需的资源。
初始文件更改扫描将创建您网站文件及其文件哈希的索引。 文件散列是文件内容的缩短的、非人类可读的版本。
初始扫描完成后,iThemes Security Pro 将继续分块扫描您的文件。 如果在后续扫描之一中文件哈希发生更改,则意味着文件的内容已更改。
您还可以通过单击“文件更改检测”设置中的“立即扫描文件”按钮来运行手动文件更改

文件更改一直在发生,每次更改都会收到电子邮件警报,很快就会变得势不可挡。 不知不觉中,它变成了一个狼吞虎咽的男孩,你开始完全忽略文件更改警报。
好消息是 iThemes Security Pro 可以智能地识别合法更改以减少通知以及您如何将预期频繁更新的文件的通知静音。 您可以从 iThemes Security 插件中的通知中心管理所有 iThemes Security 通知。 从您的 WordPress 管理仪表板,访问安全 > 设置并找到通知中心模块。
5. 为对网站进行更改的用户启用双因素身份验证
双因素身份验证是通过需要两种不同的验证方法来验证个人身份的过程。 谷歌在其博客上分享说,使用双因素身份验证可以阻止 100% 的自动机器人攻击。 赔率不差!
iThemes Security 插件允许您为 WordPress 站点激活双因素身份验证,因此用户必须输入辅助代码才能登录。
iThemes Security Pro 提供的三种两因素身份验证方法包括:
- 移动应用程序– 移动应用程序方法是 iThemes Security Pro 提供的最安全的两因素身份验证方法。 此方法要求您使用免费的双因素移动应用程序,例如 Authy 或 Google Authenticator。
- 电子邮件- 双因素的电子邮件方法会将时间敏感代码发送到您用户的电子邮件地址。
- 备用代码– 一组一次性使用代码,可用于在主要两因素方法丢失时登录。
要开始在您的网站上使用双因素身份验证,请在 iThemes Security Pro 设置的主页上启用该功能。

按照此处的步骤继续为您的 WordPress 站点设置双因素身份验证。 如果您遵循了我们的建议并为特权用户启用了强制要求,那么接下来您将看到输入双因素令牌的位置。

总结:共同打造更安全的网络
当您发现正在寻找您的 WordPress 网站的所有潜在安全威胁时,如果您感到有点不知所措,请不要担心。 事实是,威胁很多,但解决方案可能很简单。
我们希望本指南能帮助您了解 WordPress 网站上 SQL 注入攻击的风险。 通过实施一些 WordPress 安全最佳实践以及上述 5 个步骤,您将拥有更好的防线。
自 2011 年以来,Kristen 一直在编写教程来帮助 WordPress 用户。您通常可以找到她为 iThemes 博客撰写新文章或为 #WPprosper 开发资源。 工作之余,克里斯汀喜欢写日记(她写了两本书!)、远足和露营、烹饪以及与家人一起进行日常冒险,希望过上更现代的生活。
