预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于构造路径的存储过程SQL注入检测 熊婧曹忠升朱虹冯玉才 (华中科技大学计算机学院多媒体与数据库研究所,武汉430074) DetectingSQLInjectionAttacksinStoredProcedureBasedonPath-Construction XiongJing,CaoZhongsheng,ZhuHong,andFengYucai (CollegeofComputerScience&Technology,HuazhongofComputerScience&Technology,Wuhan430074) AbstractVerylittleattentionispaidondetectingSQLinjectionattacksforstoredprocedures.Anapproachbasedonpath-constructionisproposed.Asetofconstructed-pathsofexecutiveparametersisobtainedbyanalyzingtheexecutingflow,andthenthedetectingrulesaregenerated.FinalSQLstatementswhicharebuiltbysubstitutinguserinputsfortheparametersintherulesareanalyzedonbothstructuresandsemantictree.AccordingtotheexperimentonTPCW,comparisonwithrelatedwork,oursolutionhaslowerfalsepositivesrateandomittedrate.Inaddition,theperformanceofthesystemwiththedetectingmoduledoesnotdecreaselargely. KeywordsSQLInjection;storedprocedure;pathconstruction 摘要入侵检测领域的相关研究大多忽视了对利用存储过程的SQL注入攻击的检测。提出了基于构造路径的存储过程SQL注入检测方法。通过对执行流程的分析,得到执行参数的构造路径,形成检测规则。检测时替换规则中的输入参数为用户输入值,对所得到的SQL语句进行结构和语义上的检测。在标准测试平台TPCW上的实验结果表明,不仅在检测率还是漏报率上都要优于同类研究工作;在增加了基于该方法构建的检测模块后,对系统性能影响不大。 关键词SQL注入;存储过程;构造路径 中图法分类号TP391 引言 Web应用程序所面临的最为频繁的攻击手段——SQL注入攻击,逐渐引起了越来越多国内外研究学者的关注[1]。现有的比较成熟的SQL注入检测方案大多都忽视了对于利用存储过程的SQL注入攻击[2]。攻击者往往能够利用存储过程中动态SQL语句构造过程中存在的漏洞,通过设计适合的输入参数以达到注入的目的。 例1:如图1所示的存储过程.,若攻击者提供给输入参数@LoginID的值为'''or1=1——'',@Password值假设为''null'',则最终构造的SQL语句为:Select*fromDetailswhereLoginID=''or1=1——'andpassword='null',实际执行的语句为Select*fromDetails,攻击者将得到Details表的所有内容。这仅仅只是攻击者所能利用的攻击方式中的一种。 图1存储过程 相关研究工作中,KeWei等[3]提出了一种针对应用程序中利用存储过程存在的漏洞,实现SQL注入攻击的检测方法。通过比较存储过程中可能生成 的原始SQL语句和组合了用户输入值之后的SQL语句在结构上的异同实现对攻击的检测。该方法在 用户正常输入单引号时会产生误报,且对于存在较多流控制结构的存储过程,该方法会产生漏报。 本文提出一种基于构造路径的存储过程SQL注入检测方法。在学习阶段,通过分析执行参数的形成过程,得到其构造路径,形成检测规则;在检测阶段将规则中的输入参数替换为用户输入值,对最终执行的SQL语句进行结构和语义上的双重检测,解决了同类工作为考虑全面的问题,有效地减少了误报和漏报。 基于构造路径的存储过程SQL注入检测 可注入性判定 对在动态构造的SQL语句的形成过程中出现的语句和变量进行依赖性分析[4],得到变量之间的关联性,作为对存储过程进行可注入性判定的基础。在不同的数据库系统中,执行动态构造SQL语句的函数参数称为执行参数,对于参数形式为字符串相加的特殊情况,引进一个新变量且初始化为字符串相加后的值,将其作为新的执行参数。 设s是存储过程q中的一条语句,Def_S(s)