2006-10-30

SQL Server安全之加密术和SQL注入攻击

来源: 中国本站网 作者:佚名 评论 0 条
 

测点定位弱点

SQL 注入的脆弱点发生在程序开发员构造一个WHERE 子句伴随着用户的输入的时候。比如,一个简单的ASP程序答应用户输入一个顾客的ID然后检索公司的全部人员的名字,假如顾客ID假如作为ASP页面的请求串的一部分返回,那么开发员可以编写下面的代码获得数据:

strConn = "Provider=SQLOLEDB;Data Source=(local);" & _

"Database=Northwind;Integrated Security=SSPI"

Set cnn = Server.CreateObject("ADODB.Connection")

cnn.Open strConn

strQuery = "SELECT ContactName FROM Customers " & _

“WHERE CustomerID = '" & Request.Form("CustID") & "'"

Set rstResults = cnn.Execute(strQuery)

Response.Write(rstResults.Fields("ContactName").Value)

现在你知道什么地方有问题了吧?假如用户知道一个用户的ID,他可以通过检索来获得全部的相应的名字。现在明白了?

获得额外的数据

当然,对于一个攻击程序,尽管它不知道任何顾客的ID,甚至不用去猜,它也可以获得数据。为了完成这个工作,它将下面的文本输入到应用程序调用顾客ID的textbox中:

customer ID:

'UNION ALL SELECT ContactName FROM Customers

WHERE CustomerID <>'

假如你输入了这个代码,你将会看到返回一个询问语句:

SELECT ContactName FROM Customers

WHERE CustomerID = ''

UNION ALL SELECT ContactName FROM Customers

WHERE CustomerID <>''

通过获得空和非空顾客的ID并集,这个查询语句会返回数据库中所有的相关姓名。事实上,这个UNION技术可以被用来获得你数据库中大多数信息,看看这个CustomerID的值:

'UNION ALL SELECT FirstName ' ' LastName FROM

Employees WHERE LastName <>'

它将SQL语句变成:

SELECT ContactName FROM Customers

WHERE CustomerID = ''

UNION ALL SELECT FirstName ' ' LastName FROM

Employees WHERE LastName <>''

共3页: 上一页 [1] 2 [3] 下一页
(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:在Oracle里设置访问多个SQL Server  
下一篇:一个完整的SQL SERVER数据库全文索引的示例
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号