技术开发 频道

SQL注入安全威胁

  【IT168 技术文档】

  SQL 注入对于那些使用动态的SQL 数据库的系统是一个严重的威胁(也就

  是说,应用系统运行的时候,SQL 会被编译)。一个熟知SQL 技术的黑客很容易

  攻击这样防护薄弱的系统,但良好的应用程序设计可以减少风险。不要只是眼于

  满足纸上谈兵,设计人员就必须仔细考虑如何防护黑客可能对应用系统进行的攻

  击。此外,数据库管理员必须给软件开发者最小系统的权限。

  创建一个测试应用系统

  我们创建一个简单的测试应用系统可以帮你更好的理解SQL 注入是怎么实

  现的。这个系统是用SQL Server Northwind 数据库。为了简化创建应用系统,

  Employees 表是用来作为的用户表。用户的第一个名字和最后一个在名字都存在

  Employees 表。第一个名字和最后一个名字和实际的应用系统中输入的用户名和

  密码关联。用户可以登录时使用动态SQL ,一个参数化查询或存储过程。

  你可以下载SQL 语句ValidateUserProc.sql,或者得到应用系统的源代码

  injectSQL.cs 或者injectSQL.vb。

  虽然这个示例应用程序是一个Windows 应用程序,这可能是一个Web 应用

  程序,甚至是Java 应用程序。采用动态SQL 和完全独立于操作系统,数据库厂

  商,和编写应用程序的编程语言,造成的直接后果就是出现这样的缺陷。

  理解这个测试应用系统

  表面上,这个测试应用系统按照预期工作并符合基本的商业目标。通常的用

  户都会知道一个有效的登陆名和密码。那些不知道一个有效的登陆名和密码的是

  无法登陆系统的。实际上,应用程序将验证用户只能使用只有一个方法,要么符

  合用户名和密码,它不会提供另外的登陆方法。

  这个测试应用系统会提供一个选择不同的数据库来验证SQL 注入时候系统

  的脆弱性和如何防范它们。用动态SQL 验证用户身份为SQL 注入创建漏洞提供

  了机会,但参数查询和存储过程都防止SQL 注入。

  为了让应用系统简单,我们创建了一个单一的页面。在这个系统里输入一个

  有效的用户名和密码以后,用户当然会被带到另一个页面,因为测试应用系统所

  显示的用户“已被授权”。无效的名字和姓氏将导致应用程序显示“未经授权的”。

  无论是否使用动态SQL,存储过程,或一个参数查询,SQL 语句在测试应

  用程序执行都像下面这个例子:

  select EmployeeID from Employees

  where FirstName = 'Andrew' and LastName = 'Fuller'

  一个有效的名字和姓氏的结果EmployeeID 被送回从查询。无效的用户名和

  密码组合的结果在没有数据被返回。
 

【注】 51Testing授权IT168独家转载,未经明确的书面许可,任何人或单位不得对本文内容复制、转载或进行镜像,否则将追究法律责任。 本文出自51Testing电子杂志《51测试天地》第十四期,http://www.51testing.com/html/82/n-141082.html

0
相关文章