WEB开发网
开发学院数据库MSSQL Server SQL概述及在网络安全中的应用(下) 阅读

SQL概述及在网络安全中的应用(下)

 2007-05-19 09:43:17 来源:WEB开发网   
核心提示: 这里我解释一下,UNION 语句是用来将两个不同的查询结果集相加得到一个结果集,SQL概述及在网络安全中的应用(下)(3),UNION使用的唯一要求是两个查询的信息(你的查询语句)必须有相同的列数和相同的数据类型我举个例子,web程序中有如下语句:SQLstring= "SELE

这里我解释一下,UNION 语句是用来将两个不同的查询结果集相加得到一个结果集,UNION使用的唯一要求是两个查询的信息(你的查询语句)必须有相同的列数和相同的数据类型

我举个例子,web程序中有如下语句:

SQLstring= "SELECT FirstName,LastName,
EmployeeID FROM Employees WHERE City ='"&strCity"'"

合法的SELECT语句和我们注入的UNION SELECT语句在WHERE子句中都要有相同的列。就上面的语句来说,如果我要加入UNION 语句的话,前后两者都要有3个列。并且他们列的数据类型也要相互匹配才可以。如果FirstName这个值是字符串类型的,那么在你注入的语句中所对应的值也应该是字符串类型的。一些数据库,如ORACLE,是对类型检查非常严格的。其他的数据库相对要好一些,允许你输入任何数据类型并且它会自动的把你输入错误的数据类型转换成正确的。比如SQL数据库中,你在varchar类型的地方输入数值类型的数据(如int)是不会报错的,因为在这里数值类型会被自动转为字符串类型。但是如果在smallint列处输入text类型则被认为是非法的,因为text类型不能被转换成int类型。把数值类型的数据转换成字符串型是被允许的,而反之则不行,所以默认都是使用数值类型的数据。

要想知道我们要注入的目标语句中有多少个列,你就要试探性的往UNION SELECT子句中添加相应的值,直到它不报“在UNION语句中的所有查询都必须在目标列表中具有相同数目的表达式”这样的错为止。如图所示,如果你遇到的是数据类型不匹配的错误,那么你要去改变列的数据类型。如果返回消息只是一个转换数据类型失败的错误,那就说明你已经猜对了列的数目,只是其中有个别的列的数据类型不对。那么接下来要做的就是判断是哪个列的数据类型的不正确导致的错误。然后将他改过来就可以了。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:SQL 概述 网络安全

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接