档案管理网站的SQL注入攻击与防范

    李建荣++何保荣++秦奕

    摘 要:本文通过实例分析了SQL注入攻击原理,根据本人平时的工作总结,系统地阐述了如何防范SQL注入攻击、SQL 注入攻击检测方法和SQL注入攻击后的补救措施。希望对档案管理网站开发人员和档案管理网站管理人员有一定的启发,提高档案管理网站的安全性。

    关键词:SQL;SQL注入;SQL注入攻击;数据库;档案管理网站

    随着计算机和网络技术的日益发展,网络化、数字化成为档案管理发展的重要方向,档案管理网站建设成为其中很重要的组成部分。在网站建设过程中,由于网站开发人员的能力和管理经验参差不齐,部分网站开发人员在编写代码的时候,没有对用户输入数据的合法性进行严格判断和过滤,使网站存在不同的安全隐患,容易遭受不同程度的SQL注入攻击[1]。目前档案管理网络安全系统主要以防火墙为主,而防火墙只是对访问对象进行认证,而对于网站本身存在的软件问题,入侵者依然可以在遵守防火墙访问规则的前提下实施攻击,防火墙并不能有效解决SQL注入攻击问题。所以研究档案管理网站的SQL注入攻击与防范措施是摆在档案管理网站开发人员和网站管理人员面前的一个急需探讨的重要课题。

    1 SQL注入攻击概述

    1.1 SQL注入攻击概念。SQL(Structured Query Language)是一种用来和数据库交互的文本语言,我们也把它叫做结构化查询语言,使用它可以对数据库进行管理。

    SQL注入,就是在客户端通过把SQL命令插入到Web 表单递交或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,即通过递交参数构造巧妙的SQL语句,从而成功获取想要的数据[2]。一旦SQL注入成功,就形成了SQL注入攻击,轻则导致重要数据的泄露或篡改,重则导致整个服务器受他人控制,一旦服务器被挂木马或者病毒,就会造成整个服务器瘫痪。

    由于档案管理网站要对大量数据进行管理,因此离不开数据库,而目前常用的数据库有Oracle、Sybase、DB2、MS SQL Server 等,这些数据库均是基于SQL 语句的标准数据库,所以SQL注入攻击具有广泛性、技术难度不高、危害性大等特点。

    1.2 SQL注入攻击的原理。SQL注入攻击原理就是利用某些数据库的外部接口把用户精心编写的、具有特定含义的数据合理地插入到实际的数据库操作语言当中,从而达到入侵数据库的目的[3]。产生SQL注入攻击的主要原因是程序对用户输入的数据没有进行细致的过滤,导致非法数据的导入。

    登录在网站设计中是很重要的一个部分,下面以登录验证中的模块为例,来说明SQL注入攻击的具体实现方法。在Web应用程序的登录验证程序中,一般有用户名(username)和密码(password)两个参数,程序会通过用户所提交输入的用户名和密码来执行相关的授权操作。其原理是通过查找user表中的用户名(username)和密码(password)的结果来进行授权访问,典型的SQL查询语句为:

    Select*from users where username=‘adminand password=‘smith

    如果分别给username和password赋值“‘admin or 1=1- - ”和“123”,那么,SQL脚本解释器中的上述语句就会变为:

    select*from users where username=‘adminor 1=1- - and password=‘123

    该语句中“- -”表示注释语句,即“- -”后面所有的内容为注释内容,系统不再执行。Where条件部分由逻辑或运算连接的两个判断条件,只要一个条件成立,整个SQL语句就会成功执行,而1=1在逻辑判断上是恒成立的,所以在该SQL语句中,不管用户名和密码对不对,该语句都可以正常执行。至此,入侵者恶意构造的SQL语句就得到了正确执行,实现一次SQL注入攻击。

    同样道理,如果程序没有实施类型强制,通过在输入数据时构造SQL语句,还可以删除数据库中的数据表,造成大量数据丢失。例如:

    Update subject Set score=? Where name=‘xiaoming

    如果成绩的值被恶意输入为:99;Drop Table users#

    这时该SQL语句就会变成下面的语句:

    Update subject Set score=100;Drop Table users #where name=‘xiaoming

    系统一旦执行该语句,其中的SQL语句Drop Table users,就会将“users”表从数据库中删除。

    2 如何防范SQL注入攻击

    SQL注入攻击防范方法目前已经有很多,总结起来有以下几个方面:

    2.1 加强对用户输入的验证。当服务器接受用户端提交的数据时,要先对用户端数据的合法性进行严格检查,使恶意数据不能直接被嵌入到SQL语句中。

    使用恰当的验证对用户端输入的数据进行检查,最大限度地保证符合定义的标准过程,是否满足预设定的类型、长度或大小、数值范围和格式等。在SQLServer数据库中,有比较多的用户输入内容验证工具,可以帮助管理员来对付SQL注入式攻击。

    利用存储过程可以实现对用户输入变量的过滤,拒绝接受一些特殊的符号,如上面例子恶意删除数据表那段代码中,只要存储过程把那个分号过滤掉,这个恶意SQL代码就没法执行了。所以可以直接把这些类似的特殊符号过滤掉,即使在SQL语句中嵌入了恶意代码,也不容易形成SQL注入攻击。

    2.2 屏蔽系统出错信息。一般对数据库操作出现错误时,系统会提示错误提示信息。入侵者根据错误提示很容易得到有关数据库的相关信息,从而进行恶意SQL注入攻击。例如有以下错误信息:

    Microsoft OLEDBProviderforODBCDrivers(0x80040E07)[Microsoft][ODBC SQL Server Driver][SQL Server] 将nvarchar值“sonybb”转换为数据类型为int时发生语法错误。

    根据这个出错信息,有点数据库常识的人就可以获得以下信息:该网站使用SQL server数据库,用ODBC 连接,连接账号名为sonybb。获得这些信息对入侵者下一步的SQL注入提供了重要数据,方便他们恶意构造SQL语句,顺利实现SQL注入式攻击。

    2.3 SQL 语句参数化。SQL语句参数化是指用占位符或绑定变量来向SQL查询提供参数的方法,是一种更加安全的动态字符串构造方法,而不是把用户输入的变量直接嵌入到SQL语句[4]。因为参数化查询可以重用执行计划,SQL语句所要表达的语义不会改变,参数化方法可以杜绝大部分的SQL注入攻击。然而,SQL语句参数化存在一定的缺点,它只能参数化数值,不能参数化标识符或关键字。

    2.4 加强管理员登录页面所在路径的强壮度。由于管理员具备对整个网站的管理权限,管理员一般通过后台成功登录后就可以对整个网站进行管理。因此入侵者进行SQL注入很重要的一步就是猜测管理员的后台入口。一旦入侵者破解了管理员的后台入口,就可以行使管理员的一切权力,对整个网站进行掌控,很轻松地管理数据、修改数据、删除数据。因此,要加强系统管理后台登录目录的保密工作,不要把登录页面放在admin、login等常用目录名下。

    2.5 对重要数据信息采用非常规加密方法。目前在程序中对口令等重要信息加密都是采用md5 函数加密方法,即密文=md5(明文),此处推荐在原来md5 函数加密的基础上再增加一些非常规的加密方法,即在md5加密的基础上再附带一些没有规律的数据,如密文md5(md5( 明文) +654321) ,最终增加重要数据的保密性。

    2.6 限制管理员登录方式。采取内网认证码方式和设定专属IP 登录后台系统措施,限制管理员登录方式,即使入侵者进行了 SQL注入攻击,获得了管理员的登录方式,只要使用电脑的IP地址不对,同样也无法进入后台管理页面。

    3 SQL 注入攻击检测方法

    一旦网站出现问题,需要网站管理人员经常对网站的相关方面进行查看,除了查毒杀毒以外,更重要的要观察网站是否受到了SQL注入攻击,然后才可以及时采取相应的措施,使网站损失达到最小。网站遭受SQL注入攻击,一般都会留下一定的“痕迹”。SQL注入攻击检测方法主要有数据库检查、IIS日志检查和其他的一些相关信息判断。

    3.1 数据库检查。如果使用SQL注入攻击软件工具Domain、NBSI 和HDSI等进行攻击,一般都会在数据库中生成一些临时表。通过查看数据库中新建表的结构和内容是否有异常,可以判断是否曾经发生过SQL注入攻击。

    3.2 IIS日志检查。在Web服务器中如果启用了日志记录,则IIS日志会记录访问者的IP地址、访问文件等信息,SQL注入攻击往往会大量访问某个存在SQL注入点的动态网页,日志文件数量会急剧增加, 通过查看日志文件的大小以及日志文件中的内容, 可以判断是否发生过SQL注入攻击。

    3.3 其他相关信息判断。SQL注入攻击成功后,入侵者往往会添加用户、开放相关的远程终端服务以及安装木马等,可以通过查看系统管理员账号、远程终端服务器开启情况、系统最近日期产生的一些文件等信息来判断是否发生过入侵。

    4 结束语

    防范SQL注入攻击是保证档案管理网站安全的一个重点。本文通过实例分析SQL注入攻击原理,根据本人平时的工作总结,系统地阐述了如何防范SQL注入攻击、SQL 注入攻击检测方法和SQL注入攻击后的补救方法,希望对档案管理网站开发人员和档案管理网站管理人员有一定的启发。由于SQL注入攻击的种类繁多,灵活多变,很难用一种固定的方法全部解决SQL注入问题,如何更加有效地防范更高级别的SQL注入攻击则是以后有待解决的问题。

    参考文献:

    [1]王云.Web 项目中的SQL 注入问题研究与防范方法[J].计算机工程与设计,2010.

    [2]彭赓.基于改进网络爬虫技术的SQL 注入漏洞检测[J].计算机应用研究,2010.

    [3]高洪涛. SQL注入攻击途径及策略分析[J]. 网络安全技术与应用,2011(3).

    [4] Justin Clarke .SQL注入攻击与防御[M] .北京:清华大学出版社,2010(6).

    作者单位:李建荣,何保荣:河南牧业经济学院软件学院;

    秦奕:武汉音乐学院

    来稿日期:2016-02-17