运用LINQ轻松清除SQL注入式攻击
2007-09-01 13:08:07 来源:WEB开发网验证程序设计不当
验证仅在客户层面执行
在应用程序中,验证时遗漏了字段(有时即使是一个字段)。
防止SQL注入的另外一层涉及正确地确定应用程序中所有SQL查询的参数,不管是在动态SQL语句中还是在存储过程中。例如,如果代码像下面这样构建查询,就比较安全:
SELECT [CustomerID], [CompanyName], [ContactName]
FROM [Customers]
WHERE CompanyName = @CompanyName
当作为SQL语句的一部分执行时,参数化查询将输入作为一个字面值,因此服务器就可能将带参数的输入作为可执行代码。即使你使用了存储过程,你仍然必须采取另外一步来确定输入的参数,因为存储过程并不对嵌入式查询中的SQL注入提供保护。
即使采取这上述的简单修正措施,SQL注入对许多公司来说仍然是一个大问题。对开发团队的挑战是要教育每一个开发人员谨慎对待这些类型的漏洞,采取有目的的和有效的安全标准来防止攻击,增强标准和操作安全的评估, 确认无任何疏漏。这样就会需要引入许多变量去保证应用程序安全,因此如果你选择一项能够使SQL注入式攻击成为不可能的数据访问技术,你的效率将会更高。这正是LINQ发挥作用之所在。
LINQ概述
LINQ增加了用任何类型的数据存储进行查询和更新数据的标准模式,无论是SQL数据库还是XML文档,还是.NET对象都是这样。在构建数据库驱动的应用程序时,LINQ能够使开发人员像管理C#或者VB中的对象那样管理相关数据,这称为“LINQ to SQL”,被看作是ADO.NET数据技术系统的一部分。在最初以CTP形式引入时,LINQ to SQL被认为是DLINQ。
LINQ to SQL使得你将应用程序中的数据作为你所使用的编程语言中的本地对象,简化相关数据管理和数据库连接的复杂性。事实上,你可以通过LINQ显示和操作数据库的数据,而无需你编写任何SQL语句。在运行时刻,LINQ to SQL将嵌入或“集成”到你的代码中的查询转换成SQL,并在数据库系统上执行它们。LINQ to SQL以对象的形式将查询结果返回到应用程序中,完全转移了你与数据库及SQL的交互形式。没有什么清除Web应用程序中的SQL注入的方法能够比从应用程序中清除SQL更快。停靠LINQ to SQL,你就可以实现。
更多精彩
赞助商链接