李寿财 马秀峰
校园网的安全稳定与所用技术是分不开的,由于ASP技术入门门槛不高,所以校园网一般都是用ASP技术来架构的。由于开发人员的技术水平参差不齐,致使一部分程序存在安全隐患,导致网站数据被修改、删除等现象。笔者在对学校网站两年多的开发和维护过程中,发现了很多这样的问题,其中大部分为SQL注入。
一、SQL注入原理
SQL攻击的根源在于,程序命令和用户数据之间没有做到泾渭分明。这使得攻击者有机会将程序命令看成是用户输入的数据提交给Web程序,以发号施令,为所欲为。为了SQL攻击,攻击者需要在常规输入中混入将被解释为命令的“数据”。
SQL注入能使攻击者绕过认证机制,完全控制远程服务器上的数据库。SQL是结构化查询语言的简称,它是访问数据库的事实标准。目前,大多数Web应用都使用SQL语句来操纵存放在数据库中的数据。几乎所有的Web应用在后台都使用某种SQL数据库。跟大多数语言一样,SQL语法允许数据库命令和用户数据混杂在一起。如果开发人员不细心的话,用户数据就有可能被解释成命令,这样远程用户不仅能向Web应用输入数据,而且还可以在数据库上执行任意命令。
二、判断SQL注入的方法
SQL注人是通过在地址栏中附加一些代码,使服务器执行这些SQL语句来实现的。一般的文章管理系统、下载系统、论坛、留言本、相册等都会有个发布信息的页面,例如show.asp?id=,这说明此页面正在调用SQL语句查询数据库的信息。一般而言,SQL语句原貌大致如下:
select * from 表名 where 字段=xx
如果这个show.asp对后面的id整型参数无过滤,就可能存在SQL注入漏洞。一般使用经典的1=1和1=2测试方法来判断SQL注入漏洞是否存在。例如在网址http://www.xxx.com/show.asp?id=35后加上and 1=1后, show.asp运行正常,而且与http://www.xxx.com/show.asp?id=35得到的页面相同;在http://www.xxx.com/show.asp?id=35 后加上 1=2, show.asp运行异常。到这里基本上可以断定页面是否存在SQL注入漏洞。
三、解决SQL注入的方法
黑客是通过不断的试误进行逐层突破。防止一般的SQL注入有以下三种方法。
1.在需要防范注入页面加入防注入系统程序
一般ASP程序在调用数据库信息前需要建立数据库链接,负责数据库链接的程序代码一般都保存在一个ASP文件中,同时这个文件一般以“!--#include file=”conn.asp”--”的形式被其他ASP程序调用。所以,我们可以通过在这个数据库链接文件内容前加上下面的防注入代码,来达到防止别人进行注入。
SQL_injdata=":|;|>|<|--|sp_|xp_||dir|cmd|^|(|)|+|$|'|copy|format|and|exec|insert|select|delete|update |count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")
If Request.QueryString<>"" Then
For Each SQL_Get In Request.QueryString
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then
Response.Write "SQL通用防注入系统"
Response.end
end if
next
Next
End If
If Request.Form<>"" Then
For Each Sql_Post In Request.Form
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 Then
Response.Write "SQL通用防注入系统"
Response.end
end if
next
next
End If
2.修改数据库中的用户名和密码字段及后台页面的名称
通过SQL注入分析器可以轻松跳过防注入系统并自动分析其注入点。找到注入点后,黑客会不断地对用户名和密码进行推测,推测出正确的用户名和密码后,他们还会不断地猜测用户的后台登录页面名称。鉴于此,笔者建议校园网管理人员把数据库的用户名和密码字段及后台页面改为不太常用的名称,另外,不要把后台登陆页面的超链接放到主页面上。
3.双账号策略
某些强大的SQL注入分析器不仅可以轻松分析注入点,还可以分析网站的管理员账号及密码。既然无法逃过检测,那我们就做两个账号,一个是普通的管理员账号,一个是防止注入的账号。双账号策略的具体方法是首先将管理员的账号字段的数据类型进行修改,文本型改成最大字段255或选择备注型,密码的字段也进行相同设置。其次将这个普通管理员账号放到数据表中第一行并输入大量中文字符。最后,把真正的防注入的SQL账号放入第二行后的任意位置。
通过上面的三种策略初步完成了SQL注入攻击的防范,基本杜绝了ASP程序被恶意SQL注人数据所带来的危害。
(作者单位:山东日照市曲阜师范大学信息技术与传播学院)