如何防止 SQL 注入

强制执行最小权限访问、对用户输入进行净化以及限制数据库程序,都有助于防止 SQL 注入和随之而来的数据泄露。

学习目标

阅读本文后,您将能够:

  • 解释 SQL 注入的工作方式
  • 回顾阻止 SQL 注入的最佳做法
  • 了解 Cloudflare 如何帮助预防 SQLi 攻击

相关内容


想要继续学习吗?

订阅 TheNET,这是 Cloudflare 每月对互联网上最流行见解的总结!

参阅 Cloudflare 的隐私政策,了解我们如何收集和处理您的个人数据。

复制文章链接

SQL 注入攻击的工作原理

结构化查询语言注入 (SQLi) 是一种代码注入攻击,它使攻击者能够检索、操纵或破坏 SQL 数据库中的敏感信息。这些攻击通过在 SQL 查询字段中插入专门的命令来实现;执行这些命令后,它们可能会使攻击者能够伪造合法用户的身份,查看或检索受保护的数据,甚至获得服务器的 root 用户访问权限。

通常情况下,攻击者通过利用应用程序编程接口 (API) 中的漏洞实施 SQLi,而这些接口无法正确区分合法代码和不受信任的代码。由于无法检测被更改的命令或查询,这些 API 可能会被用来执行恶意请求,如绕过 Web 应用程序防火墙 (WAF)身份验证措施。

SQLi 通常采用以下三种方法之一执行:

  1. 带内 SQL 注入使用单一通信渠道发起并完成攻击。常见的带内 SQLi 包括基于错误的 SQLi(错误消息帮助攻击者识别有关基础数据库的关键信息)和基于合并的 SQLi(攻击者使用 UNION SQL 运算符来发现数据库中的漏洞)。这是最简单、最常见的 SQLi 形式。
  2. 相比之下,带外 SQL 注入不允许攻击者使用同一通信渠道发起并完成攻击。取而代之,被破解的应用程序必须能够将数据外泄到攻击者可以控制的远程端点,通常通过 DNS 或 HTTP 请求进行。这是最困难、最不常见的 SQLi 形式。
  3. 推理 SQL 注入(也称为盲 SQLi)要求攻击者向目标服务器发送有效负载,以找出利用它的方法。这通常有两种形式:基于布尔的盲 SQLi(攻击者使用 true-false 查询来迫使服务器产生不同的响应)或基于时间的盲 SQLi(攻击者可以通过服务器响应时间的变化推断出相同的信息)。这通常比带内 SQLi 需要更长时间来完成,但同样会造成损害。

要查看良性和恶意 SQL 查询的实际示例,请阅读什么是 SQL 注入?

遭到攻击?
防范网络攻击的全方位保护

如何防止 SQL 注入

虽然 SQL 注入是最普遍的 API 威胁之一,但通过正确的预防策略可以有效避免。预防 SQL 注入的有用方法包括限制数据库过程、净化数据库输入以及强制实施最低权限访问。

限制数据库过程和代码

SQL 注入主要取决于攻击者操纵数据输入和数据库功能的能力。通过限制这些输入并限制可执行的数据库过程类型,组织可以最大限度地降低未经授权或恶意查询的风险。具体方法包括:

  • 执行预处理语句和参数化查询:预处理语句定义可接受的 SQL 代码,然后为传入的查询设置特定参数。任何恶意 SQL 语句都被归类为无效的数据输入,而不是可执行的命令。
  • 使用存储过程:与预处理语句一样,存储过程也是经过预处理、可重复使用的 SQL 语句,可从数据库中检索,并可以防止恶意方直接针对数据库本身执行代码。

验证并净化数据库输入

应该对传递给任何 SQL 数据库的用户输入进行定期监控、验证和净化,以消除恶意代码。输入验证可确保数据按照预先确定的标准进行正确检查和格式处理,而输入净化则通过删除无效或不安全的字符并根据需要重新进行格式处理来修改(或“净化”)输入内容。确保输入验证的方法包括:

  • 建立允许列表:允许列表可帮助定义有效的用户输入,数据库可据此检查(并拒绝)出现异常的传入查询。例如,特殊字符和扩展 URL 是用户输入的两种类型,攻击者可能会利用它们来收集有关数据库的信息(在运行恶意查询之前)。限制使用这些输入有助于将受到攻击的可能性降至最低。
  • 将用户提供的输入转义:组织也可以选择将用户提供的所有输入转义(即都视为输入,而不是命令或条件),这样就无法利用特定字符或单词形成恶意请求。

强制实施最低权限访问

最低权限访问原则只允许用户访问其角色所需的受保护资源。例如,这可能意味着限制获授予数据库管理员级别权限的用户数量,或者甚至为用户授予临时管理员级别的访问权限,随后可以撤销。

在基于角色的层面上限制用户访问权限也有助于最大限度地减少入侵造成的影响,因为使用窃取的凭据入侵数据库的攻击者在查看、修改、窃取或销毁受保护数据的能力方面也会受到同样的限制。出于同样的原因,组织应限制多个网站和应用程序对数据库的共享访问。

Cloudflare 如何帮助预防 SQL 注入

Cloudflare 凭借强大的应用程序和 API 安全产品组合,帮助组织提高抵御 SQLi 攻击的能力:

  • Cloudflare WAF 监控流量模式以获取潜在的 SQL 漏洞,检测绕过和攻击类型的变化,并使用先进的机器学习技术调整 WAF 规则集,以适应不断演变的攻击方法
  • Cloudflare D1 是一种无服务器 SQL 数据库,它与 Workers 原生集成,以实施预处理语句并阻止用户修改或删除数据库