尽管SQL注入是一种相对容易预防的攻击,它是最常见的网络之一黑客攻击技巧。那么,这完全是什么?

基础知识

SQL对于结构化查询语言短暂,通常发音为“续集”。SQL是用于查询和更改数据库内容的标准语言。它最初旨在进行业务分析。但随着产品专用应用程序编程接口(API)的实施和在线应用程序的增长,它很快就会被广泛使用。

例如,考虑搜索大型在线商店中的某个项目。在场景后面发生了什么,是包含产品,定价和库存数据库的SQL查询。必威唯一官方如果您以客户身份登录,则它甚至可能包含您的一些偏好。

示例SQL查询

webstore中的SQL查询示例

SQL注入

当您向网站访问者提供启动SQL查询的选项而不应用输入验证时,就会发生SQL注入。这种影响可能是可怕的,因为SQL注入可能会破坏您的数据库,或者让攻击者访问您不希望公开的数据库部分。攻击者可能是在获取您的客户的个人身份信息或您的供应商列表。

虽然SQL注入最常见的用途是用于web应用程序,但这肯定不是唯一容易受到这些攻击的应用程序类型。基本上,任何要求用户输入并使用基于sql的数据库的内容都可能在没有对输入进行适当验证的情况下被破坏,无论输入是存储在数据库中还是启动查询。

验证

当攻击者应用任何类型的代码注入技术时,可以进行SQL注入。这些可能性称为漏洞,因为它使应用程序易于攻击良好的SQL语句被插入条目字段并被执行为命令。要执行SQL注入,攻击者必须在应用程序中查找和利用安全漏洞,例如当用户输入错误过滤字符串文字转义时。此过滤是我们呼叫验证的。输入可以预期具有某种格式,如果不符合我们的期望,应拒绝或消毒。

unsanitized php代码

上面是一个完全未经过滤的php代码的非常夸张的例子。来自网站“name”字段的输入直接进入SQL查询。在这段代码中,我们无法看到查询结果发生了什么,但它通常会以某种形式显示在站点上。通过一点点的尝试和错误,攻击者可以检索管理员的用户名并更改他的密码,只需要在“name”字段中输入一个有效的SQL命令字符串。这就是我们称之为SQL注入的原因。攻击者可以把自己的代码串塞进去。

攻击的可能目标

攻击者将使用SQL注入有几个原因。

  • 毁灭:不管出于什么原因,攻击者都想让应用程序或站点停止运行。您可能见过开发人员在取笑与sql相关的事故时使用“drop table”。“drop table”命令后跟数据库中一个表的名称,将使它删除具有该名称的整个表。重建这样一个表将是耗时的——如果可能的话。
  • 窃取信息:数据泄露,有人知道吗?对你的公司的影响,至少是失去了客户的信任,可能会让你彻底破产。
  • 喂养虚假信息:攻击者可以提高学分,或引导您根据虚假信息制定业务决策。两者都可以花费你痛苦。
  • 接管控制:控制您的数据库的攻击者可能想要提供虚假信息,拒绝您的访问,或删除有价值的信息。

加密

了解攻击者想要什么以及使用哪些方法进行攻击应该有助于您防止成功攻击

例如,盗取密码的一种常见方法是欺骗搜索结果显示密码。攻击者需要做的唯一一件事就是查看SQL语句中是否有任何提交的变量可以未经过滤地传递。可以将这些过滤器设置为自定义select语句中的WHERE、ORDER BY、LIMIT和OFFSET子句。联合操作符用于组合两个或多个选择语句的结果集。如果您的数据库支持这种构造,攻击者可能会尝试向原始查询添加一个额外的查询。这个查询可以用来列出密码或用户名。除了消毒输入之外,使用加密的密码字段是您可以使用的另一种防御武器。

加密重要数据和构建一些过滤器来验证输入需要很长一段时间。显然,验证方法取决于应用程序本身和编码语言。方法的攻击这在PHP中的工作例如,在ASP中可能会失败。在文本字段中排除某些意外和/或不相关的字符是一个很好的开始。

容纳想要被追究为琼斯夫人的客户更重要,或者避免攻击者愉快地使用的攻击者能够使用“&&”符号,这些符号是在SQL查询和许多编码语言中的有效命令.顺便说一下,它不一定是一个或另一个。只要您确保在添加到查询命令之前,您可以接受此类字符的输入。

概括

SQL注入是将未经授权的代码放入SQL语句的位置,并且是黑客使用的众多Web攻击机制之一来窃取数据。它可能是最常见的应用层攻击之一。了解攻击者的攻击者是什么以及他们使用的方法可以帮助您保护您的业务免受这些类型的攻击。