张季
摘要:Web中數据库的应用越来越广泛,SQL的注入也成为了黑客攻击数据库比较常见的手段。文章对SQL注入攻击的一些相关原理进行了简要的说明。并对现阶段SQL注入攻击的特点进行了研究和剖析,然后在这个基础之上提供了几种对SQL进行预防的防护方法。并且对这些方法的使用情况进行了必要的说明
关键词:SQL注入 研究 预防对策
随着互联网的发展,大量的web网站开始涌现,极大地方便了人们的信息获取需求。与此同时,黑客针对网站的攻击也屡屡出现,造成了或多或少的经济损失现代社会,而近年来互联网技术的发展迅猛,以因特网为基础平台的Web应用系统在计算机的各个领域都有了越来越广泛的用途。譬如企业的办公系统以及电子商务系统等等。这些系统绝大多数都是采用的HTTP的方式进行数据的传递,然后将这些数据相关组织的数据库当中,这些数据对一些不法分子来说具有非常大的吸引力,这就给数据的安全性造成了很大的安全隐患,比较典型的就是SQL的注入。
一、SQL注入
从目前的情况来看,现在的Web应用程序在一般情况下采用的都是依靠数据库为用户进行写、度数据的方法,但是,在另一方面,由于从事程序编程人员的水平参差不齐,绝大多数编程的工作者没有在编写程序的时候对用户数据的合法性进行辨别,这就导致在应用程序的过程中出现了安全隐患。SQL注入,简单的来说,就是不法分子利用高科技手段改变原来数据的查询语句,并把这个命令提交给服务器,并在这个基础之上执行恶意的SQL命令然后不法分子在依据数据返回的结果中获取攻击者想要得到的信息,进行下一步的不法活动。
(一)关于SQL的注入原理
众所周知,SQL注入的目的就是对数据库进行攻击,然后在攻击数据库的基础之上在攻击其所在的服务器,而这种攻击的主要方式就是不法分子将代码在参数中进行植入,而这些参数会被植入SQL命令中加已执行。例如将恶意的代码插入到字符串当中,然后在这个基础之上将这些字符串保存在数据库当中的数据表中,或者将其当作元数据,当被存储的字符串植入到动态的SQL命令当中来的时候,这些恶意的代码就会被执行。虽然数据库的类型是多种多样的,但是SQL注入攻击的原理和基本过程确是基本上都一样的。结合其他学者的相关研究,本文将SQL注入的类别分为用户登录类别以及其他类两种类型。在用户登录的类别当中,不法分子可以绕过存在安全隐患的登录框进行登录,而在其他类别中,其则需要对攻击的对象进行更深一步的分析,并对数据库的类型有一定的了解,只有通过这样的途径,其才能实现SQL的注入,也只有在这个基础之上才能毒数据库进行攻击。
我们都知道,SQL的注入对数据库的危害是非常大的,攻击者不仅可以利用已经存在的SQL漏洞对服务器进行攻击,对数据库的敏感信息进行盗窃、窃取,甚至还有的不法分子会对服务器的信息进行肆意的篡改和删除,技术水平高的不法分子还有可能种植后门程序,这种行为导致的最严重的后果就是当不法分子一旦获取该服务器的最高管理权限,其就可能实现整个操作系统的控制,有的甚至导致系统无法进行日常的运行甚至会导致整个系统的瘫痪。
二、关于SQL注入攻击的防范措施
(一)参数化语句
由于数据库所执行的多数都是由SQL查询创建成的字符串,因此该构造方式极易导致应用系统受到SQL注入攻击。一般情况下,在编程语言和数据库访问API时,可采用占位符或绑定变量的方法为SQL查询提供必要参数,以此替代对用户输入进行操作。这种称为参数化查询的方法更加安全可靠,它能够尽可能地避免应用中常见的SQL注入漏洞,并可在多数情况下代替现有的动态查询,对一般数据库来说其效率更高。参数化查询语句能够为数据库提供预处理语句功能,从而优化查询并进一步提高后续查询性能
(二)输入验证
输入验证是一种功能强大的SQL注入控制手段。所谓输入验证,就是通过对应用程序的输入数据进行验证,从而保证其符合应用程序中已定义标准的过程。此方法既可以将参数限制成固定的某种类型,也可以通过使用正则表达式或业务逻辑进行输入验证。
(三)编码输出
除验证输入方法外,还应对不同模块或部分应用间互相传递的内容进行编码。在SQL语境中,对发送至数据库的内容进行编码或引用是必要的操作,这样能够保证内容被正确的处理。除此以外,当正在使用的数据未经过严格审查,或数据来自第三方时,还应对数据库信息进行编码。该方法适用于无法使用参数化查询语句的情况,此时则需对发送至数据库的数据进行编码,但如果当数据库查询某个值没有编码时,该应用程序仍然易受到SQL注入的攻击。
通过上述分析,我们可以发现SQL注入对数据库的危害是非常大的,这也对现代社会的信息犯罪提供了一种新的犯罪手段,最大限度的减少SQL注入漏洞可以有效的对SQL的注入风险进行预防,正如上文提到的,我们一定要结合SQL注入的原理来探讨SQL的预防方法,只有这样做,其防御措施才能够做到实时有效。从目前的情况来看,市面上已经出现了一些能够自动监测SQL注入的工具和攻击工具,但是这些都是最基本的东西,要想更进一步的对SQL注入进行更加有效的预防,还是有必要对SQL注入的原理进行更加深入的研究,然后在这个基础之上采取正确、合理的应对措施,最好能做到防患于未然,只要做到这些,SQL的注入危害还是可以避免的。