一、引言 在网络技术快速发展的今天,网络攻击也日趋严重,因此软件系统的安全性设计显得越来越重要,已经称为一个不可忽视的问题。由于SQL注入式攻击的基础是SQL语法,所以从理论上讲,只要所用数据库管理系统是基于SQL语言的,都有可能受到攻击,因此在系统设计时必须认真考虑如何对SQL注入式攻击进行很好的防范,否者系统运行时可能会出现严重的后果。 二、SQL注入式攻击原理 SQL注入式攻击(SQL Injection Attack)是一种基于SQL语句漏洞的攻击,也就是说攻击者通过构造一个系统设计之外的输入,把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。SQL注入式攻击具有攻击面广、结构简单、破坏性强等特点。 三、常见的SQL注入攻击方式以及防范策略 常见的SQL注入式攻击方式: (1)、没有才去措施过滤转义字符,如在文本框中输入""';或';1';=';1""之类的内容。 (2)、利用数据库服务器中的漏洞 (3)、攻击者利用时间延误衡量页面加载的时间,从而决定所注入的语句是否为真 针对以上SQL注入式攻击,常用的解决方式有: (1)、替换单引号以及删除连字符 (2)、屏蔽系统出错信息 (3)、在正式处理数据之前对用户输入进行合法性检查,同时限制输入数据的长度 (4)、使用存储过程代替SQL 语句执行查询 四、利用LINQ技术防范SQL注入式攻击 LINQ (Language-Integrated Query,语言集成查询)是微软公司的一项新技术。它将查询功能直接引入到.NET Framework 3.5所支持的编程语言中,查询操作可以通过编程语言自身来传达,而不是以字符串嵌入到应用程序代码中。LINQ可以对任何类型的数据存储进行查询和更新,无论是SQL Server数据库还是XML文档。在构建数据库驱动的应用程序时,LINQ能够使开发人员像管理C#中的对象那样管理相关数据,称为“LINQ to SQL”。 LINQ to SQL使得你将应用程序中的数据作为你所使用的编程语言中的本地对象,简化相关数据管理和数据库连接的复杂性。事实上,你可以通过LINQ显示和操作数据库的数据,而无需你编写任何SQL语句。在运行时刻,LINQ to SQL将嵌入或“集成”到你的代码中的查询转换成SQL,并在数据库系统上执行它们。LINQ to SQL以对象的形式将查询结果返回到应用程序中,完全转移了你与数据库及SQL的交互形式。 在了解了LINQ的基本思想后,我们通过一个实例来看一下如何运用LINQ to SQL防范SQL注入式攻击,现在我们要在Gridview1网格控件中显示数据,编写如下代码: {. . . StudentsDataContext db = new StudentsDataContext (connectionString) ; GridView1. DataSource = from Student in db. Students where Student.ClassID = = txtClassID. Text select Student; GridView1. DataBind() ; } 在使用了LINQ to SQL后,在运行时生成并在服务器上执行的SQL语句如下所示: Select [t0].[ClassID], [t0].[StudentName] FROM [dbo].[Students] AS [t0] WHERE [t0]. [ClassID] = @p0} 通过以上语句可以看出,Where子句自动被加上了参数,不允许将用户的输入内容执行命令,因此,传统的SQL注入式攻击是无法造成破坏的。不管用户将什么值作为输入提交给搜索页面,这个查询是安全的,它不允许用户的输入执行服务器上的命令。如果你输入了用来实施SQL注入式攻击的字符串,结果并不会返回任何信息,从而实现防御SQL 注入式攻击的作用,使攻击无法造成破坏。 五、总结 在进行系统开发时如果不注意安全设计,会很容易被植入SQL注入式攻击,但我们可以采用适当的方法修补这些语句漏洞。LINQ技术通过让系统开发人员直接与对象模型交互,从而最大消除了来自数据库的SQL注入式攻击。 参考文献: [1]徐陋, 姚国祥.SQL 注入攻击全面预防办法及其应用[J]. 微计算机信息,2006,22:10- 12. [2]陈恒涛, 张鹃, 毛新华. Web 环境下的SQL 注入式攻击与主动防御[J].河南科技学院学报(自然科学版),2005,12:80- 83. [3] 张洪星.基于ASP.NET 的SQL 注入式攻击及防范解决方案[J].电脑知识与技术,2006,(12):76- 89. [4] 张勇.Web 环境下SQL 注入攻击的检测与防御[J].现代电子技术,2004,(15):103- 105. [5] 迟国栋.SQL 注入攻击与防范[J].世纪桥,2007,(3):72- 73. |