技术开发 频道

在C#3.0中使用LINQ轻松防御SQL注入攻击



【IT168 专稿】

   
随着Internet逐渐普及,基于Web的各种非法攻击也不断涌现和升级,因此,很多开发人员被要求使他们的程序变得更安全可靠,这也逐渐成为这些开发人员共同面对的问题和责任。而很多使用Web系统的企业也不断投入大量的资金,以购买和使用更安全的框架和软件平台。很多开发人员也从一开始设计程序时就注重使用更有效的方法来建立安全的应用程序,并防止有破坏性的攻击。但不幸的是,开发团队的成员经常缺乏这方面的训练,以及进行安全设计的相关经验。

    当开发人员为应用程序加入更多的安全防护罩时,也许最先考虑的Web应用程序攻击就是我们众所周知的SQL注入攻击。这是一种通过命令注入方式进行攻击的方式。命令注入是任何通过在服务端运行非授权程序进行攻击的基本方法。这种方法一般是通过在客户端输入特殊或不可预料的字符串(在字符串中包含有破坏性的命令)来改变Web程序被期望的运行结果。由于这种攻击方式非常普遍,也非常容易掌握,因此,SQL注入攻击被大范围地使用,所以它是非常危险的,甚至是防不胜防的。但幸运的是,如果我们理解了SQL注入攻击的原理,是很容易防御的。随着微软的.NET技术的不断发展,也为开发人员提供了新的数据接口,如果适当使用它们,就可以完全防止SQL注入攻击。这项技术被称为集成查询语言,也就是LINQ(将在本文的后面进行讲解)。这项技术将和即将发布的Visual Studio2008以及.NET Framework 3.5一起发布。本文将带领读者探索如何利用LINQ来防止Web程序的SQL注入攻击,读者将会从本文深刻体会到LINQ在这方面的无限潜力。

一、什么是SQL注入

    SQL注入是一种对Web应用程序进行的攻击,黑客通过向应用程序传递恶意数据,并欺骗服务器将其当成正确的命令并执行。虽然这种攻击方法非常容易防御,但它也是非常普遍和有害的。这是因为它可以允许攻击者直接运行命令来操作我们的工作数据。在很多极端的情况下,攻击者不仅仅可以访问我们所有的数据,而且还可以删除表和数据库。甚至可以得到控制数据库服务器的权利。

   
既然这些攻击如此容易防御,那么它们为什么如此危险呢?首先,我们的应用数据库是一个非常吸引人的蛋糕,原因很简单,因为在数据库中保存了很多黑客非常关心的数据。如果SQL注入成功后,攻击者是非常容易通过这种方式检测并浏览到这些数据的。虽然SQL注入错误并不是开发人员最容易犯的错误,但它可能却是攻击者最常使用,也是最容易成功的攻击方式。

   
检查SQL注入攻击最容易的方法就是在应用程序中可以访问数据库的表达式处插入一个元字符串。如一般网站都会包含一个search输入字段,如果一个攻击者输入一个数据库元字符,如一个"'"符号,如果应用程序反回一个数据库错误信息,攻击者不仅可以知道他已经发现了这个应用程序的数据库信息的一部分,而且他可以向其注入更多有意义的命令,并使服务器执行它们。应用程序安全专家Michael Sutton最近使用Google Search API在数分钟之内发现了数以百记的易受SQL注入攻击的网站。
1
相关文章