基于SQL的Web系统安全防范——SQL注入漏洞攻击研究及防范措施SQL-BasedWebSystemSecurity——StructuredQueryLanguageInjectionLeakAttackStudyAndDefenseMeasure作者:辽宁省经济和信息化委员会姜志坤摘要:在当今的数字世界中,人们发现在维持公开的Internet连接的同时,保护网络和计算机系统的安全变得越来越困难。病毒、木马、后门、蠕虫等攻击层出不穷,虚假网站的钓鱼行为也让警惕性不高的公众深受其害。据有关部门统计,2008年一季度,我国有15万台主机被植入木马,网站篡改数量迅速增加,预计已达5835个,其中政府网站达484个,每月564次的安全事件报告。为了减轻信息泄露及系统攻击带来的风险,企业和机构开始对自己的系统进行渗透性测试,找出其中存在的漏洞和安全隐患。本文通过对目前最流行的SQL注入漏洞攻击的过程做了逐一的分析,并提出了检测方法和防范措施。关键字:SQL注入漏洞攻击脚本攻击SQL注入点检测防范模型有害代码SQL注入(SQLInjection)漏洞攻击是目前网上最流行最热门的黑客脚本攻击方法之一,那什么是SQL注入漏洞攻击呢?它是指黑客利用一些Web应用程序(如:网站、论坛、留言本、文章发布系统等)中某些存在不安全代码或SQL语句不缜密的页面,精心构造SQL语句,把非法的SQL语句指令转译到系统实际SQL语句中并执行它,以获取用户名、口令等敏感信息,从而达到控制主机服务器的攻击方法。1.SQL注入漏洞攻击原理1.1SQL注入漏洞攻击实现原理SQL(StructuredQueryLanguage)是一种用来和数据库交互的语言文本。SQL注入的攻击原理就是攻击者通过Web应用程序利用SQL语句或字符串将非法的数据插入到服务器端数据库中,获取数据库的管理用户权限,然后将数据库管理用户权限提升至操作系统管理用户权限,控制服务器操作系统,获取重要信息及机密文件。SQL注入漏洞攻击主要是通过借助于HDSI、NBSI和Domain等SQL注入漏洞扫描工具扫描出Web页面中存在的SQL注入漏洞,从而定位SQL注入点,通过执行非法的SQL语句或字符串达到入侵者想要的操作。下面以一段身份验证的.NET代码为例,说明一下SQL注入攻击的实现方法。SqlConnectionnwConn=newSqlConnection((string)ConfigurationSettings.AppSettings["DBconnStrings"]);stringqueryStr="SELECTuserid,userpwd,username,typeFROMuserswhereuserid='"+Txtusername.Text+"'";DataSetuserSet=newDataSet();SqlDataAdapteruserAdapter=newSqlDataAdapter(queryStr,nwConn);userAdapter.Fill(userSet,"Users");Session["UserID"]=Txtusername.Text.ToString();Session["type"]=type.Text.ToString();Response.Redirect("/Myweb/admin/login.aspx");从上面的代码中可以看出,程序在与数据库建立连接得到用户数据之后,直接将username的值通过session传给login.aspx,没有进行任何的过滤和处理措施,直接用来构造SQL语句,其危险系数是非常高的,攻击者只要根据SQL语句的编写规则就可以绕过身份验证,从而达到入侵的目的。1.2SQL注入漏洞攻击分析SQL注入可以说是一种漏洞,也可以说是一种攻击。当程序中的变量处理不当,没有对用户提交的数据类型进行校验,编写不安全的代码,构造非法的SQL语句或字符串,都可能产生这个漏洞。例如Web系统有一个login页面,这个login页面控制着用户是否有权访问,要求用户输入一个用户名和口令,连接数据库的语句为:“select*fromuserswhereusername='username'andpassword='password'”攻击者输入用户名为aaor1=1口令为1234or1=1之类的内容。我们可以看出实际上攻击者并不知道真正的用户名、口令,该内容提交给服务器之后,服务器执行攻击者构造出的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:“select*fromuserswhereusername='aa'or1=1andpassword='1234'or1=1”;服务器执行查询或存储过程,将用户输入的身份信息和数据库users表中真实的身份信息进行核对,由于SQL命令实际上已被修改,存在永远成立的1=1条件,因此已经不能真正验证用户身份,所以系统会错误地授权攻击者访问。SQL注入是通过目标服务器的80端口进行的,是正常的Web访问,防火墙不会对这种攻击...