蓝盟IT外包谈什么是“SQL注入”?

发布者:上海IT外包来源:http://www.lanmon.net点击数:3178


    SQL注入已经成为了最常见的web攻击方式之一,如果企业发布了非静态页面的动态页面的网站到互联网上就一定会面对SQL注入的攻击。一个具体的案例场景:某天,当你在查看应用的管理后台时,发现有很多异常的操作。接着,你很快反应过来了,这应该是黑客成功登录了管理员账户。于是,你立刻找到管理员,责问他是不是设置了弱密码。管理员很无辜地表示,自己的密码非常复杂,不可能泄露,但是为了安全起见,他还是立即修改了当前的密码。奇怪的是,第二天,黑客还是能够继续登录管理员账号。问题来了,黑客究竟是怎么做到的呢?
    通常来说,我们会将应用的用户信息存储在数据库中。每次用户登录时,都会执行一个相应的 SQL 语句。这时,黑客会通过构造一些恶意的输入参数,在应用拼接 SQL 语句的时候,去篡改正常的 SQL 语意,从而执行黑客所控制的 SQL 查询功能。这个过程,就相当于黑客“注入”了一段 SQL 代码到应用中。再讲的具体一些就是Web 服务器会向数据访问层发起 Sql 查询请求,如果权限验证通过就会执行 Sql 语句。这种网站内部直接发送的Sql请求一般不会有危险,但实际情况是很多时候需要结合用户的输入数据动态构造 Sql 语句,如果用户输入的数据被构造成恶意 Sql 代码,Web 应用又未对动态构造的 Sql 语句使用的参数进行审查,则会带来意想不到的危险。

     通过 SQL 注入攻击,黑客能做什么?SQL 注入会令 Web 后台执行非常规的 SQL 语句,从而导致各种各样的问题。那么通过 SQL 注入攻击,黑客究竟能够干些什么呢?

    1. 绕过验证在上面的内容中,我们已经介绍过," or ""=" 作为万能密码,可以让黑客在不知道密码的情况下,通过登录认证。因此,SQL 注入最直接的利用方式,就是绕过验证,也就相当于身份认证被破解了。
    2. 任意篡改数据除了绕过验证,我们在任意语句执行的部分中讲到,SQL 注入漏洞导致黑客可以执行任意的 SQL 语句。因此,通过插入 DML 类的 SQL 语句(INSERT、UPDATE、DELETE、TRUNCATE、DROP 等),黑客就可以对表数据甚至表结构进行更改,这样数据的完整性就会受到损害。比如上面例子中,黑客通过插入 DROP TABLE Users,删除数据库中全部的用户。
    3. 窃取数据在 XSS 漏洞中,黑客可以通过窃取 Cookie 和“钓鱼”获得用户的隐私数据。那么,在 SQL 注入中,黑客会怎么来获取这些隐私数据呢?在各类安全事件中,我们经常听到“拖库”这个词。所谓“拖库”,就是指黑客通过类似 SQL 注入的手段,获取到数据库中的全部数据(如用户名、密码、手机号等隐私数据)。最简单的,黑客利用 UNION 关键词,将 SQL 语句拼接成下面这行代码之后,就可以直接获取全部的用户信息了。
    4. 除了获取数据之外,影响服务可用性也是黑客的目标之一。SQL 注入破坏可用性十分简单,可以通过完全消耗服务器的资源来实现。比如,在 Web 后台中,黑客可以利用 WHILE 打造死循环操作,或者定义存储过程,触发一个无限迭代等等。在这些情况下,数据库服务器因为 CPU 被迅速打满,持续 100%,而无法及时响应其他请求。
    简要总结,通过 SQL 注入攻击,黑客可以绕过验证登录后台,非法篡改数据库中的数据;还能执行任意的 SQL 语句,盗取用户的隐私数据影响公司业务等等。SQL 注入相当于让黑客直接和服务端的数据库进行了交互。正如我们一直所说的,应用的本质是数据,黑客控制了数据库,也就相当于控制了整个应用。
    SQL 注入就是黑客通过相关漏洞,篡改 SQL 语句的攻击。通过 SQL 注入,黑客既可以影响正常的 SQL 执行结果,从而绕过验证,也可以执行额外的 SQL 语句,对数据的机密性、完整性和可用性都产生影响。为了避免 SQL 注入的出现,我们需要正确地使用 PreparedStatement 方法或者存储过程,尽量避免在 SQL 语句中出现字符串拼接的操作。除此之外,SQL 注入的防护也可以和 XSS 一样,对用户的输入进行验证、检测并过滤 SQL 中的关键词,从而避免原有语句被篡改。
    预防SQL注入除了优化数据库的代码以外,仍然有很多成熟的非代码层面的安全解决方案,比如说部署WAF防火墙,如需更深入的咨询,请联系蓝盟IT外包获取。

文/上海蓝盟   IT外包专家
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部