SQL注入就是用恶意SQL语句攻击数据驱动的应用程序,通常目的是获取敏感数据。
什么是SQL注入?
结构化查询语言(Structured Query Language,SQL)注入,通俗来讲就是一种网络安全攻击技术,也是一种安全漏洞。有人会把恶意的SQL语句,故意或不小心放到后端数据库的输入框里,从而给攻击数据驱动的应用程序创造条件。
SQL注入是如何起作用的
SQL注入(通常简称SQLi)是很常见的一种攻击方式,攻击者会用恶意SQL脚本操控后端数据库,获取那些本不该被泄露的数据。这些数据可能包括企业的敏感信息、订阅者名单,还有消费者的机密信息等。SQL注入对公司运营的影响很大,比如攻击者可能会非法查看用户列表、删除整个数据列,严重的时候还能拿到数据库的管理员权限,这些都会给公司带来巨大损失。
算SQL注入造成的损失时要注意,如果用户的联系信息、所在地、信用卡数据等隐私信息被偷,消费者就会对公司失去信任。虽然这种攻击能针对任何SQL数据库,但最常被攻击的,是那些连接后端数据库、数据量比较大的网页。

SQL注入的类型
SQL注入可以按两种方式分类:一是访问底层数据的方式,二是可能造成的危害程度。
最常见的三种分别是:推理式(盲)SQL注入、带内(经典)SQL注入、带外SQL注入。
带内SQL注入(In-band SQL injection):攻击者用同一条通信线路,既执行攻击,又获取信息。这种方式简单又快,所以特别常见,主要分两种:
基于错误的SQL注入:攻击者通过一些操作,让数据库返回错误信息,再利用这些错误代码,摸清数据库的架构。
基于UNION的SQL注入:这种方式会用到SQL的UNION函数,把多个数据库查询语句合并成一个,发给HTTP服务器,服务器的回复里,可能会有攻击者能用的信息。
推理式(盲)SQL注入:攻击者想摸清服务器架构,就给服务器发一些特定请求,观察服务器的反应和行为。因为没有数据从服务器数据库直接传给攻击者,没法像带内注入那样直接获取信息,所以叫盲SQL注入。这种注入全靠观察服务器的反应和行为规律,执行起来通常比较慢,但危害一点也不小。主要分两种:
- 布尔型:攻击者给数据库发一个SQL请求,让应用程序返回响应。响应会根据请求里的条件是真还是假而不一样,HTTP响应的内容也会跟着变,或者保持不变,攻击者就能凭这个判断条件是否成立。
- 基于时间的:攻击者给数据库发一个SQL请求,让数据库在回复前等几秒。攻击者通过服务器回复所用的时间,就能判断请求里的条件是真还是假——服务器会根据条件结果,要么马上回复,要么等一会儿再回复。就算不看数据库返回的具体信息,攻击者也能判断自己的请求是否有效。
带外SQL注入:这种攻击能不能成功,要看web应用程序所用的计算机系统,是否具备某些特定功能。它通常用来辅助带内注入和推理式注入。
SQL注入攻击的例子
想实施SQL注入的攻击者,通常会用通用的SQL查询语句,去攻击数据库条目的漏洞。这种攻击方式有多种具体用法,以下是几个实际案例:
1. Accellion攻击
Accellion公司是文件传输设备(FTA)的开发商,FTA是一种网络节点,专门用来传输全球企业常用的大量敏感信息,已经使用了20多年,早已过了使用寿命。从2021年1月开始,该公司就承认存在一个长期未解决的SQL注入漏洞,并着手处理其带来的影响。
FTA遭到了一场特殊的复杂攻击,攻击者把SQL注入和操作系统上的代码执行结合在了一起。专家认为,这场攻击是由与FIN11金融欺诈集团、Clop勒索软件公司有关联的黑客发起的。这也能看出,SQL注入不只是影响在线应用或web应用,就像这个案例里,它还能用来攻击后端系统、窃取信息。
这次Accellion攻击属于供应链攻击,影响了多家使用FTA设备的公司,包括华盛顿州、新西兰储备银行、投资委员会、澳大利亚证券公司、电信巨头新加坡电信(Singtel),以及安全软件公司Qualys。
2. Epic Games攻击
2016年,Epic Games向80万名账户绑定该公司网络论坛的用户,发出了安全警报,多个游戏设计师论坛也暂时关闭。该公司建议用户,在所有相关论坛上重置密码,且密码不要重复。Epic Games表示,此次信息泄露与虚幻引擎、虚幻锦标赛论坛有关,被盗数据包括用户电子邮件地址和论坛相关信息。
除此之外,Epic Games还公布了一起更严重的黑客攻击事件,这次攻击影响了《无尽之剑》《UDK》、早期《虚幻联盟》以及《战争机器》的游戏社区。攻击者获取了用户的电子邮件账户、加盐散列凭据,以及其他与论坛相关的信息。
3. Kaseya攻击
2021年7月,IT咨询公司Kaseya遭到勒索软件攻击,导致其托管的服务提供商客户旗下的数千名用户陷入风险。该公司表示,网络攻击者利用Kaseya VSA产品的漏洞,绕过身份验证,通过SQL注入执行任意命令。攻击者借助一款名为REvil的工具,通过VSA产品的常规功能,将勒索软件部署到用户终端。超过36000家托管服务提供商,连续四天无法访问Kaseya的旗舰VSA服务。
4. 潜在的WooCommerce攻击
2021年7月,WooCommerce宣布,其多个软件版本和功能插件存在SQL注入漏洞,网络安全分析师也发现,这段时间出现了多起相关攻击事件。这些漏洞很可能是因为WooCommerce未及时修补造成的,具体问题可能包括:WooCommerce checkout支付处理插件的缺陷、shop插件的跨站脚本(XSS)漏洞导致网页内容被轻微篡改,或是插件所用的WordPress批准系统存在设计错误。
在劫持WordPress和WooCommerce网站时,诈骗者会使用各种投机取巧的非法手段。虽然网站被黑客攻击后,可能不会出现明显迹象,但留意一些常见的WordPress安全预警信号,能帮助发现攻击。最常见的预警信号包括:
- 网站被重定向到未授权的网址
- 网站首页出现不当内容
- 管理员后台访问受限
- 网站流量出现异常下降
- 搜索结果中出现“此页面可能已被篡改”的提示
- 浏览器出现异常,提示可能遭到攻击
- 网站注册量出现异常激增

防止SQL注入的一些措施
虽然SQL注入攻击仍是web管理员面临的最大威胁,但只要采取正确的措施,就能降低风险。以下是一些具体方法,能帮助减少遭遇SQL注入攻击的概率:
1. 验证用户输入
验证用户输入是最基础、最常用的初始防护措施,能最大程度减少SQL注入的可能。首先要明确哪些SQL语句是最关键的,然后为所有可接受的SQL语句建立一个允许列表,排除所有未经过验证的账户。这个过程通常被称为数据完整性保障或查询修改。
另外,要根据实际场景配置用户输入规则。比如,电子邮件输入框,只能允许输入电子邮件中常见的字符,包括必须有的“@”符号;社会保障号码和电话号码,只能允许输入特定的数字组合。虽然这一步不能完全阻止SQL注入攻击,但能给攻击中常用的数据收集方式,增加一层防护。
2. 限制数据中特殊字符的使用
数据清理不彻底,也是防御数据泄露时需要注意的问题。清理数据、避免字符串拼接漏洞很关键,因为SQL注入攻击者会利用特殊字符模式攻击数据库。
比如,配置MySQL的real_escape_string()函数处理输入,就能防止一些潜在的有害字符(比如单引号)被当作命令,传入SQL语句中。而使用预备语句,也是避免未经验证查询的最常用方法之一。
3. 强制使用预置语句和参数化
可惜的是,输入验证和信息过滤并不是万能的。企业必须对所有SQL语句,使用带参数化查询的准备语句(有时也叫变量绑定)。通过明确声明所有与请求、参数化相关的SQL代码,就能区分用户输入和代码本身,避免混淆。
要注意,虽然灵活的SQL编码方式能让应用程序开发更灵活,但也可能让SQL注入漏洞被当成有效的代码命令。因为服务器会把恶意SQL查询当成普通数据,而不是可能有风险的SQL命令。
4. 利用数据库中的存储过程
和参数化一样,使用存储过程也需要绑定变量。存储过程保存在数据库中,由web应用程序调用。但要注意,如果存储过程是用动态SQL创建的,也可能存在安全漏洞。根据OWASP等机构的建议,参数化是必要的,但无论是参数化还是存储过程,单一的策略都不足以保证安全。
5. 积极管理补丁和更新
数据库和程序中的SQL注入漏洞,会不断被发现和公开披露。和其他网络安全问题一样,企业必须及时关注相关资讯,快速部署升级和补丁。这包括所有web应用相关的软件,比如数据库服务器程序、框架、库、连接器,以及web服务器软件,都要及时更新,防范SQL注入。
6. 部署web应用防火墙
强烈建议使用硬件或软件形式的web应用防火墙(WAF),过滤有害内容。现在的防火墙,尤其是下一代防火墙(NGFW)和防火墙即服务(FWaaS),不仅有完善的专项防护机制,还能根据需求灵活调整配置。在补丁或更新尚未发布时,WAF能有效防范SQL注入攻击。
比较有代表性的就是ModSecurity,它是Apache、Microsoft IIS和Nginx web服务器的免费开源组件,有一套复杂且不断更新的规则,能过滤潜在的危险web请求,其SQL注入防护功能,能检测到很多通过web渠道植入SQL的尝试。
7. 加固操作系统和应用程序
这一最佳实践,能确保端到端的物理和虚拟IT基础设施正常运行,防范SQL注入威胁。2020年供应链黑客事件曝光后,很多开发人员开始采用行业标准的安全机制(比如美国国家标准与技术研究院(NIST)框架),增强应用程序和操作系统的安全性。应用程序提供商的安全标准,也能帮助企业识别并禁用不必要的应用程序和基础设施,提升防御能力。
8. 限制攻击区域
在网络犯罪中,所有可能被攻击的入口,都被称为攻击面。针对SQL注入攻击,限制攻击面,就是进一步保护或关闭不需要的数据库功能。
比如Microsoft SQL Server中的扩展存储过程xp_cmdshell,它能在Windows系统中打开命令提示符,执行字符串命令。由于xp_cmdshell生成的Windows程序,和SQL Server服务账户拥有相同的权限,一旦被攻击者利用,会造成严重破坏。
9. 创建适当的权限并控制访问
考虑到SQL数据库对企业的重要性,必须强制执行零信任(zero-trust)和最小权限访问原则。比如,一个网页如果只需要对数据库执行查询(SELECT)操作,就没必要赋予它插入(INSERT)、更新(UPDATE)或删除(DELETE)的权限。设置网络只读访问权限,也是最小权限原则中,防范SQL注入的关键一步。
另外,只有在必要时,才给个人授予数据库访问权限。平时使用受控访问账户更安全,就算低权限账户被泄露,也能限制攻击者的访问范围。
原创文章,作者:余初云,如若转载,请注明出处:https://blog.jidcy.com/jsjc/2579.html
