《asp网站SQL注入攻击方式和防范模型,asp论文.docx》由会员分享,可在线阅读,更多相关《asp网站SQL注入攻击方式和防范模型,asp论文.docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、asp网站SQL注入攻击方式和防范模型,asp论文ASP NET 是微软公司的一项 Web 应用开发技术,因其具有跨平台性、易于部署、简单易学等众多优点,被广泛应用在 Web 开发中。当前的 ASP NET应用程序主要以数据处理为中心,应用的数据访问技术以 ADO NET 为主。但是使用 ADO NET 进行数据访问时需要编写大量包含参数的 SQL 语句,恶意用户有可能利用这些参数通过注入攻击的方式毁坏数据库的安全性。这种利用 SQL 注入漏洞进行攻击的方式方法也成为 Web 应用程序最为严重的安全风险之一,怎样最大程度降低注入风险,从根本上防备注入攻击,成为开发人员亟待解决的问题。本文首先分
2、析 SQL 注入攻击原理和流程,然后针对 ASPNET 应用程序的数据访问技术,提出一种三层注入防备模型。1 SQL 注入攻击概述SQL 注入攻击指的是恶意用户将特定的 SQL 命令插入到表单输入框或页面请求的查询字符串中,猜想可能构成符合语法的 SQL 语句,进而到达欺骗服务器执行特定 SQL 命令并毁坏数据库安全性的目的。1 1 SQL 注入流程在 ASP NET 应用程序开发经过中经常使用 Ac-cess 或 SQLServer 管理数据库,由于这 2 种数据库管理系统中系统变量和系统表有所不同,所以进行 SQL注入攻击时会首先判定应用程序访问数据库的种类。能够将 SQL 注入攻击的基本
3、流程分为3 个环节:( 1) 检测应用能否存在 SQL 注入点。能够在输入参数值中添加 ,然后根据阅读器返回信息进行判定;( 2) 判定数据库管理系统类型。若存在 SQL 注入点,能够利用 2 种数据库管理系统中系统变量和系统表的区别判定详细类型;( 3) 进行攻击。判定出数据库管理系统类型后,获取操作权限并毁坏数据库安全性和完好性。1 2 注入攻击常见方式SQL 注入攻击的根本途径是通过用户不断地恶意输入完成的,而在 ASP NET 应用程序运行经过中能够接收用户输入的方式方法主要有 3 种: ( 1) 表单输入元素获取输入值; ( 2) UL 参数重写; ( 3) 修改Cookies 文件
4、内容。针对 SQLServer 数据库管理系统而言,攻击者能够采用的详细攻击方式如表 1 所示。2 防备模型通过分析可知,ASP NET 应用程序中存在的SQL 注入攻击主要是利用带有特征输入字符串和无明显特征的攻击字符串进行的。为了更好保卫数据库安全性,降低 SQL 注入攻击风险,本文提出从 3 个层次构建注入攻击防备模型。2 1 三层防备模型三层防备模型中的第一层主要过滤带有明显特征的输入字符串,通过过滤函数的应用拒绝已经知道的恶意用户输入; 第二层对用户输入进行参数化,通过使用绑定变量方式解决和避免一般的 SQL 注入问题;第三层是结合实际应用拒绝无明显特征的攻击字符串,通过对 SQL
5、语句中的本文关键词语进行转义实现。三层模型构造如此图 1 所示。2 2 SQL 过滤SQL 过滤是注入攻击防备模型的第一层,主要过滤页面表单中可编辑文本框的输入值和 UL 中的查询参数,若包含带攻击特征的字符则将特征字符去掉后向下执行。在 SQLServer 2005 中自定义过滤函数StringFilter,将 用 户 输 入 中 的 特 征 字 符 过 滤 掉。StringFilter 函数的声明语句如下:StringFilter( input_str varchar( MAX) , from_str var-char( MAX) , to_str varchar( MAX) )参数 in
6、put_str 表示需要进行过滤的字符串,from_str 表示特征字符组成的集合, to_str 表示特征字符过滤的结果,函数返回值是将 from_str 中的每个字符替换为 to_str 中的相应字符之后的字符串。过滤函数 StringFilter 的设计算法如下:( 1) 判定 3 个参数能否为空值,若有空值则函数返回空值; 若都不为空,执行( 2) ;( 2) 定义变量 result 表示 input_str,变量from_len 表示 from_str 的长度,若 from_len 大于0,获取最后一个即将替换的字符; 若 from_len 等于0,函数返回 result;( 3)
7、假如当下字符在 from_str 中有重复值,from_len 自减 1,执行( 2) ; 若没有重复值则执行( 4) ;( 4) 假如 from_len 大于 to_str 的长度,则从result 中删除在 from_str 中而不在 to _str 中的字符,执行( 6) ; 否则,执行( 5) ;( 5) 将 result 中与 from_str 中一样的字符替换为 to_str 中相应字符;( 6) 将 from_len 自减 1,执行( 2) 。2 3 参数化语句经过 SQL 参数过滤后,常见的特征字符被替换,但是未被指定为特征字符的合法 SQL 标示符将绕过过滤。考虑到 SQL
8、注入攻击大部分是由于在程序中采用动态字符串或动态 SQL 引起的,所以注入攻击防备模型的第二层是采用绑定变量的方式将用户提交的数据进行参数化处理。假设存在关系 Table,Table 中包含 2 个字符串类型的属性 ColA 和 ColB。从页面传递 2 个字符串 strA和 strB 进行查询操作。动态 SQL 语句的定义如下:string sql = select* from Table where ColA = + strA +and ColB = + strB +改用参数化语句则按下面语句:stringsql = select * from Table where ColA = str
9、1 andColB = str2SqlParameter param1 = new SqlParameter( str1 ,strA) ;SqlParameter param2 = new SqlParameter( str2 ,strB) ;2 4 本文关键词语转义参数化语句能够一定程度提高数据库访问的安全性,但也有可能会向数据库传递潜在的不安全参数,例如传入一个更新语句等。为了进一步对注入攻击进行防备,在防备模型的第三层采用本文关键词语转义方式方法,应用转义后的 SQL 关键字开创建立查询语句,执行前进行反向转义。恶意用户注入 SQL 语句时不知道转义规则将会使注入内容发生语法错误,进而到
10、达防备目的。为了简化转义规则设计,需要结合 ASP NET 应用的详细实现功能确定需要转义的本文关键词语集合。下面自定义本文关键词语转义类 KeyWordTranslate,基本构造如下:public class KeyWordTranslatepublic static string Translate ( string keyword) / /定义转义规则,返回转以后结果public static string everse( string transword) / /定义反向转义规则,返回本文关键词语public static stringAlleverse( ) / /构建转义后 SQ
11、L 本文关键词语的数组,用以判定指定单词能否是转以后的本文关键词语public static stringAllKeyWord( ) / /构建 SQL 本文关键词语数组,用以判定指定单词能否是关键词用 KeyWordTranslate 类转义本文关键词语后定义 SQL语句如下所示:String sql =+ KeyWordTranslate Translate( select )+ *+ KeyWordTranslate ranslate( from )+ Table+ KeyWordTranslate Translate( where )+ ColA = str1+ KeyWordTran
12、slate Translate( ( and )+ ColB = str2当执行 SQL 语句时,按下面步骤进行反向转义:( 1) 将 SQL 以空格和 为分隔符构造字符串数组;( 2) 判定字符串数组中能否有本文关键词语,若有则以为是注入攻击,拒绝执行,算法结束; 否则执行( 3) ;( 3) 假如 i( 初值 0) 小于字符串数组长度,判定字符串数组中第 i 个元素能否包含在 KeyWordTrans-late Alleverse ( ) 中,若包含则执行 KeyWordTrans-late everse( ) 函数得到本文关键词语,执行( 4) ; 若 i 等于字符串数组长度,算法结束,
13、sql_new( 初值为 ) 即为反向转义的结果;( 4) 将判定后的结果连接到新的字符串 sql_new;( 5) i 自加 1,执行( 3)。3 实验结果为验证防备模型的有效性,设计 ASP NET 应用程序实现简单的用户登录功能,数据库中用户表为users。登录界面设计了用户名和密码 2 个文本框接收用户输入,用户名 Admin,密码 Admin 是一个合法用户。在应用三层防备模型情况下,用户名和密码框录入不同测试用例值得到结论如表 2 所示。4 结束语通过对 ASP NET 应用程序中 SQL 注入攻击流程和攻击方式的分析,针对注入攻击的根本途径,本文提出并设计一种三层防备模型。这种防
14、备模型从过滤用户输入开场,配合参数化查询语句,同时转义SQL 本文关键词语,以 3 种不同角度逐步加强应用程序的安全防备能力。实验结果表示清楚,经过三层防备后的数据库安全性更高层次。以下为参考文献:1 周益宏,陈建勋 浅析基于 ASP NET 的网站 SQL 注入攻击及防备措施J 计算机安全,2018( 6) : 93-952 王云,郭外萍,陈承欢 Web 项目中的 SQL 注入问题研究与防备方式方法J 计算机工程与设计,2018,31( 5) :976-9783 Patel N,Mohammed F,Soni S SQL injection attacks: tech-niques and
15、protection mechanismsJ Internationl Journal onComupter Science and Engineering,2018,3( 1) : 199-2034 刘合叶 多功能 SQL 注入检测系统的实现及攻击防备方式方法研究D 北京: 北京交通大学,20185 Su Zhengdong,Wassermann G The essence of commandinjection attacks in Web applicationC/ / Proc of AnnualSymposium on Principles of Programming Langua
16、ges2006: 372-3826 周琰 SQL 注入检测方式方法的研究与实现D 西安: 西北大学,20187 Stuttard D,Pinto M The Web Application Hacker s Hand-book: Discovering and Exploiting Security FlawsM 北京:人民邮电出版社,20188 石聪聪,张涛,余勇,等 一种新的 SQL 注入防护方式方法的研究与实现J 计算机科学,2020,39( 6A) : 60-649 丁允超,范小花 SQL 注入攻击原理及其防备措施J 重庆科技学院学报: 自然科学版,2020,14( 5) :136-13910 马凯,蔡皖东,姚烨 Web 2 0 环境下 SQL 注入漏洞注入点提取方式方法J 计算机技术与发展,2020,23( 3) :121-124,12811 王伟平,李吕,段桂华 基于正则表示的 SQL 注入过滤模块设计J 计算机工程,2020,37( 5) : 158-16012 竺霞芳 双层防御 SQL 注入攻击的方式方法D 武汉: 华中科技大学,2018.