什么是SQL注入
SQL注入(也称为SQLI)是一种常见的攻击媒介,它使用恶意SQL代码用于后端数据库操作,以访问不打算显示的信息。此信息可能包括任何数量的项目,包括敏感的公司数据,用户列表或私人客户详细信息。
SQL注入对企业的影响非常深远。成功的攻击可能会导致未经授权查看用户列表,删除整个表以及在某些情况下攻击者获得对数据库的管理权限,所有这些都对业务非常不利。
在计算SQLI的潜在成本时,如果个人信息(如电话号码,地址和信用卡信息)被盗,重要的是要考虑客户信任的损失。
虽然这个向量可以用来攻击任何SQL数据库,但网站是最常见的目标。
什么是SQL查询
SQL是一种标准化语言,用于访问和操作数据库以为每个用户构建可定制的数据视图。SQL查询用于执行命令,如数据检索,更新和记录删除。不同的SQL元素实现这些任务,例如,基于用户提供的参数,使用SELECT语句检索数据的查询。
典型的eStore的SQL数据库查询可能如下所示:
代码语言:javascript复制SELECT ItemName,ItemDescription 从项目 WHERE ItemNumber = ItemNumber
由此,Web应用程序构建一个作为单个SQL语句发送到数据库的字符串查询:
代码语言:javascript复制sql_query =“ SELECT ItemName,ItemDescription 从项目 WHERE ItemNumber =“&Request.QueryString(”ItemID“)
用户提供的输入http://www.estore.com/items/items.asp?itemid=999可以生成以下SQL查询:
代码语言:javascript复制SELECT ItemName,ItemDescription 从项目 WHERE ItemNumber = 999
正如您可以从语法中收集的一样,该查询提供了项目编号999的名称和说明。
SQL注入示例
希望执行SQL注入的攻击者操纵标准SQL查询来利用数据库中未经验证的输入漏洞。这种攻击媒介有很多种方法可以执行,其中的几个将在这里展示给你一个关于SQLI如何工作的一般思路。
例如,上述提取特定产品信息的输入可以更改为http://www.estore.com/items/items.asp?itemid=999或1 = 1。
结果,相应的SQL查询如下所示:
代码语言:javascript复制SELECT ItemName,ItemDescription FROM项目 WHERE ItemNumber = 999或1 = 1
并且由于语句1 = 1始终为真,查询将返回数据库中的所有产品名称和说明,即使那些您可能无法访问的产品名称和说明也是如此。
攻击者还可以利用错误筛选的字符来更改SQL命令,包括使用分号分隔两个字段。
例如,这个输入http://www.estore.com/items/iteams.asp?itemid=999; DROP TABLE用户将生成以下SQL查询:
代码语言:javascript复制SELECT ItemName,ItemDescription FROM项目 WHERE ItemNumber = 999; 删除表用户
结果,整个用户数据库可能被删除。
SQL查询可以被操纵的另一种方法是使用UNION SELECT语句。这结合了两个不相关的SELECT查询来从不同的数据库表中检索数据。
例如,输入http://www.estore.com/items/items.asp?itemid=999 UNION SELECT用户名,密码FROM USERS会生成以下SQL查询:
代码语言:javascript复制SELECT ItemName,ItemDescription FROM项目 WHERE ItemID ='999'UNION SELECT用户名,密码FROM Users;
使用UNION SELECT语句,该查询将项目999的名称和描述的请求与另一个为数据库中的每个用户提取名称和密码的请求结合起来。
SQLI预防和缓解
有几种有效的方法可以防止SQLI攻击的发生,并防止发生SQLI攻击。
第一步是输入验证(又名消毒),这是编写可识别非法用户输入的代码的做法。
虽然输入验证应始终被认为是最佳实践,但它很少是一种万无一失的解决方案。现实情况是,在大多数情况下,制定所有合法和非法输入是不可行的 - 至少不会导致大量误报,这会干扰用户体验和应用程序的功能。
出于这个原因,Web应用程序防火墙(WAF)通常用于过滤SQLI以及其他在线威胁。为此,WAF通常依赖大量且不断更新的精心制作的签名列表,以便通过外科手段清除恶意SQL查询。通常,这样的列表包含特征来解决特定的攻击媒介,并定期修补以为新发现的漏洞引入阻止规则。
现代Web应用程序防火墙也经常与其他安全解决方案集成。由此,WAF可以获得进一步增强安全功能的额外信息。
例如,在决定阻止请求之前,遇到可疑(但不是直接恶意)输入的Web应用程序防火墙可能会与IP数据进行交叉验证。如果IP本身具有不良声誉历史,它只会阻止输入。
Incapsula 基于云的WAF使用签名识别,IP信誉和其他安全方法来识别和阻止SQL注入,并具有最小量的误报。IncapRules增加了WAF的功能,这是 一种自定义安全规则引擎,可以实现默认安全设置的精确定制,并可创建其他特定于案例的安全策略。
我们的WAF还采用众包技术,确保针对任何Incapsula用户的新威胁立即在整个用户群中传播。这可以快速响应新披露的漏洞和零日威胁。