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

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

 2007-05-19 09:43:22 来源:WEB开发网   
核心提示: 3.1绕过验证最简单的SQL注射技术是绕过基于表单的登陆.让我们假设某个网络请求的代码如下:SQLQuery = "SELECT UsernameFROM Users WHERE Username = '" & strUsername & "'

3.1绕过验证

最简单的SQL注射技术是绕过基于表单的登陆.让我们假设某个网络请求的代码如下:

  SQLQuery = "SELECT Username
FROM Users WHERE Username = '" & strUsername & "'
AND Password = '" & strPassword & "'"
  strAuthCheck = GetQueryResult(SQLQuery)
  If strAuthCheck = "" Then
  boolAuthenticated = False
  Else
boolAuthenticated = True
End If

当一个用户提交了一个用户名和密码后,查询(query)将搜索Users表单来看是否其中有一行中所包含的用户名和密码与用户提供的相同,如果找到了那么一行,则用户名被储存到变量strAuthCheck中,同时说明该用户应该被鉴定,如果没有找到那么一行,则strAuthCheck变量保持为空,同时该用户不被鉴定。

如果strUsername和strPassword变量可以包含任何你要的字符,你可以修改当前的SQL查询结构,那样即使你不知道有效的用户名和密码,你仍何以得到一个有效的name,它是如何实现的呢?让我们假设用户像下面那样填充了一个登陆表单:

  Login: ' OR ''='
  Password: ' OR ''='

这将给SQLQuery以下值:

SELECT Username FROM Users WHERE Username = '' OR ''='' AND Password = '' OR ''=''

请求并不把用户提交的数据与现存的Users表单做比较,而是直接比较''和'',显然它总是返回true,(注意nothing和null是有区别的)由于WHERE语句中的所有验证条件都符合了,用户名将使用表单中搜索到的第一行中的那个,接着用户名将被传递给变量strAuthCheck,这样我们的效力就得以保证。使用single result cycling技术,也有可能使用另外一行的数据,这将在以后讨论。

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

Tags:SQL 概述 网络安全

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