全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于对SQL注入的成因、检测和防范措施的研究【摘 要】:SQL注入是一种常用的且易于实现的入侵手段,是当前中小企业网站的最主要的威胁之一。攻击者通过检测网页地址的注入入口,进而构造具有某种危害的SQL语句,从而获取网站的WebShell权限,完成对网站的注入攻击。本文简要介绍了SQL注入形成的原因,对SQL注入的各种检测方法,最后重点总结了防SQL注入攻击的各种措施,提出了客户端和服务器端双重检测模型,给出了相关防SQL注入的程序代码。【关键字】:SQL注入 WebShell 双重检测模型 WEB旁注综合检测 【正 文】:一引言 SQL注入就是程序员对程序中动态的SQL语句没有作严格的过滤或检测,导致黑客能在注入点提交非法的SQL语句,导致程序和服务器的信息被泄漏。由于SQL注入的入门门槛低,隐蔽性好,破坏性大,杀毒软件无法查杀,是当前最主流的入侵手段。征对SQL注入的特点和危害,本文介绍了SQL注入形成的原因,SQL注入的各种检测方法,总结了各种防注入的措施。二SQL注入形成的原因SQL注入是由于程序员的编程水平参差不齐所造成的。一个有着丰富编程经验的程序员在编写程序的时候会考虑到程序的各种参数检测和过滤,而一个编程新手往往会忽略掉需要过滤的危险字段。例如:在用户登陆系统的时候,需要对用户名和密码进行判断,一般的代码如下Dim Username,PasswordUsernameRequest(“Username”)PasswordRequest(“Password”)SQL=”Select * from user where username=”&Username&” and password=”&Password&”由于有动态SQL语句,且这个SQL语句中的变量没有过滤一些危险字符,因此可以进行注入。在不知道用户名和密码的情况下,只需要在用户名和密码处输入oror,便可以成功登陆。因为oror的结果是一个布尔值,对程序来说总是为真,因此可以通过验证。三SQL注入的检测 SQL注入检测方式有两种,一是用手工进行检测,另一种用工具进行检测。1 手工检测方式 手工检测方式就是通过在一些网站连接地址后输入一些非法字符串,根据返回的结果判断网站是否可以进行注入。最常用的就是单引号测试法和12测试法。假如现在有连接地址:http:/www.*.com/news/viewnews.asp?id=1。现在在连接地址的末尾加上一个单引号,即:http:/www.*.com/news/viewnews.asp?id=1 可以根据返回的结果来判断是否可以注入。如果返回这样的结果:Microsoft OLE DB Provider for SQL Server 错误 80040e14 字符串 之前有未闭合的引号。可以得出,网站用的是SQL Server数据库,且没有对一些危险字符进行过滤,因此可以进行SQL注入。1=2测试法就是在网站连接地址后输入12进行测试,如:在http:/www.*.com/news/viewnews.asp?id=1后输入12,返回的结果如果是:BOF或EOF中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。也就说明该连接地址可以注入。2 工具检测方式目前最常用的检测工具有:阿D注入工具,NBSI扫描工具,WEB旁注综合检测工具(1) 阿D注入工具:该工具是由阿D开发的SQL注入漏洞检测工具,可以从/Soft/hacker/scan/200610/940.html下载。和其他工具相比较,阿D注入工具简单易用,图形界面操作。(2) NBSI扫描工具:是一款网站漏洞检测工具,在网站漏洞检测方面具有极高的准确率。可以从/soft/12080.htm上下载最新的版本。(3) WEB旁注综合检测工具:该工具是由明小子开发的网站漏洞检测工具,占用的资源极少,图形化界面操作。可以从/soft/2005-04-05/13837.html下载到最新版本。四 SQL注入攻击的预防1 利用常规检测工具进行扫描利用上面三个注入检测工具,对网站页面的连接地址进行全面扫描,通过扫描结果可以判断是否有注入漏洞。一旦扫描出漏洞,可以对被注入的地址进行参数过滤和检查.2 修改IIS设置SQL注入入侵是根据IIS给出的ASP错误提示信息来入侵的。如果把IIS设置成不管出什么样的ASP错误,只给出一种错误提示信息,即http 500错误,那么黑客就没办法入侵了。这是一个既有效又简单的方法,唯一的缺点就是程序员编写的代码出错时,服务器不给出详细的错误提示信息,会给程序员调试程序带来很大的不便。3 防止跨站提交数据 Function ChkPost()函数开始 Dim server_v1,server_v2定义变量 Chkpost=False 初始值为False server_v1=Cstr(Request.ServerVariables(HTTP_REFERER)取得浏览器地址栏地址 server_v2=Cstr(Request.ServerVariables(SERVER_NAME)返回的是服务器地址 If Mid(server_v1,8,len(server_v2)=server_v2 Then Chkpost=True 比较判断,地址相同说明是跨站注入End Function函数结束4 对传入的Request函数进行判断和过滤Function SafeRequest(ParaName,ParaType) - 传入参数 - ParaName:参数名称-字符型 ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符) Dim ParaValue ParaValue=Request(ParaName) 参数传入If ParaType=1 then If not isNumeric(ParaValue) then Response.write 参数 & ParaName & 必须为数字型! 判断是否为数字Response.end End if Else ParaValue=replace(ParaValue,) 过滤掉单引号End if SafeRequest=ParaValue End function5 采用URL重写技术实现页面的伪静态URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程。比如浏览器发来请求hostname/101.asp?id=12 ,服务器自动将这个请求中定向为http:/hostname/101_12.html .通过重写组件地址映射功能,将动态页面的页面地址重定向静态页面,隐藏了实际路径,大大地提高了的页面的安全性,防止黑客进行字符串猜解.另外,通过一些组件将数据库中的内容生成纯静态页面.例如,asp中可以通过FSO组件进行生成纯静态页面.当向数据库中添加数据时,通过程序生成一个纯静态页面.当用户进行访问时,就会访问这个静态页面,而不是数据库中的内容.6 充分利用存储过程进行参数传递应该尽量减少动态的Transact-SQl语句,改用存储过程中参数处理。例如:将用户身份验证的处理改为如下的存储过程:Create Proc CheckUserusername nvarchar(40),password nvarchar(40)AsSelect * from user where username=username and password=password 这样无论用户输入的参数是什么,都不存在安全问题。7 利用客户端和服务器的的双重检查检查基本模型:客户端服务器端友好提示客户提交数据合格否是检查判断合格服务器提示出错否处理数据是在客户端,主要是利用js脚本对用户输入的数据进行合法性检查(如:对日期格式,email地址的判断等),这样做一是可以减轻服务器的流量和负载,加快服务器的响应速度。另一方面可以将一些低等级的错误即时在客户端进行处理。一些黑客可以绕过客户端的数据校验,因此由必要在服务器端进行数据校验和过滤。主要是过滤一些操作数据库的危险字符。基本函数如下:Sub PreventInfuse ()函数开始 Dim SQL_injdata 定义变量 SQL_injdata= |and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare 定义需要过滤的关键子 SQL_inj = split(SQL_Injdata,|) 对上述字符串进行分割处理 If Request.QueryString Then QueryString方式,不为空执行For循环 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 进行关键字比较,如果大于0,说明进行了非法操作 Response.Write alert(防注入系统提示:非法操作!);history.back(-1) 友好提示 Response.End End If Next Next End If If Request.Form Then Form方式,不为空执行For循环 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 进行关键字比较,如果大于0,说明进行了非法操作 Response.Write alert(防注入系统提示:非法操作!);history.back(-1) 友好提示 Response.End End If Next Next End If End Sub 函数结束五 总结本文从SQL注入的成因和检测入手,重点叙述了防SQL注入的各种措施.尤其是提出了客户端和服务器双重检测模型,对SQL注入能起到很好的预防作用。很明显,SQL注入是由于编码人员的疏漏所造成的,加强编码人员的安全意识,对防范SQL注入能起到至关重要的作用.另外,做好服务器的安全设置,设置好服务器的各项安全参数,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位工勤技能-江西-江西收银员三级(高级工)历年参考题库含答案详解
- 2026事业单位工勤技能-江苏-江苏有线广播电视机务员四级(中级工)历年参考题库含答案详解
- 2026事业单位工勤技能-云南-云南计算机文字录入处理员二级(技师)历年参考题库含答案详解
- 汽车制造厂装配质量标准
- 某造船厂船舶装配准则
- 某涂料厂生产质量管控办法
- 汽车厂环保处理细则
- 第三单元 基础诊断测试卷2026-2027学年统编版九年级上册语文
- 冶金厂环保制度
- 高中一年级劳动技术《视频制作-我的中国梦》教学设计
- 川教版二年级上册生命生态安全全册教案教学设计
- 《0~3岁婴幼儿家庭教养指导》全套教学课件
- 2025-2026学年教科版一年级体育全一册教案
- 四川省高中英语会考试题及答案(2025年模拟)
- 面部识人课件
- 舞美灯光施工方案
- 药厂QC培训课件
- 小儿膝外翻诊治课件
- 工业互联网平台微服务架构性能测试报告:边缘计算与云计算协同性能优化
- 糖尿病周围神经病变
- 社团协会资产管理制度
评论
0/150
提交评论