名和列名之后还可以用 ASC 和 MID 函数来猜出各列的数据。MID 函数的格式为:mid(变量名,第几个字符
开始读取,读取几个字符),比如:mid(pwd,1,2)就可以从变量 pwd 中的第一位开始读取两位的字符。ASC
函数的格式为:ASC("字符串"),如: asc("a")就可以读出字母 a 的 ASCII 码了。那么实际应用的时候
就 可 以 写 为 : asc(mid(pwd,1,1)) 这 样 读 取 的 就 是 pwd 列 的 第 一 个 字 符 的 ASCII 码 , 提 交 :
asc(mid(pwd,1,1))>97 以返回的页面是否为正确页面来判断 pwd 列的第一个字符的 ASCII 码是否大于
97(a 的 ASCII 码),如果正确就再试是否小于 122(z 的 ASCII 码)……这样慢慢缩小字符的 ASCII 码
的范围,猜到真实的 ASCII 码也只是时间的问题。一位一位的猜就可以得到数据库中的用户名和密码了。
还有一种 ASP 验证缺陷——就是用户名和密码都输'or '1'='1,构造 SQL 语句 Select * form 表单名 where
username='' or '1'='1' and pwd='' or '1'='1'就可以达到绕过密码验证的目的。
说了那么多,其实防范的方法很简单,我们把特殊字符(如 and、or、'、")都禁止提交就可以防止注入
了。ASP 传输数据分为 get 和 post 两种, get 是通过将数据添加到 URL 后提交的方式,post 则是利用邮
寄信息数据字段将数据传送到服务器。
那么,我们先来看看如何将 方式提交数据中的特殊字符过滤。首先要知道, 是以字符串的形式将
请 求 传 给 的 , 在 将 数 据 传 递 给 之 后 , 解 析 器 会 解 析 出
的信息,然后跟据来分出各个数组内的数据。现在我们要让 方式不能提交以下
字符:
、、、、、、、、、、、、、、、
那么,防止 方式注入的代码就如下:
! "! #$%$
&!!!!!!!!!!!!!!!
"&' !!(
)*%
+,- .
+- #&"%/0' "(
)''- .(! "' #$%$((*"%
1请不要尝试进行 - 注入!
)
2
,)
*
其中,变量 中的字符串就是指定过滤的字符,以!隔开。
3333接着过滤 提交方式的注入,我们可以看到,) 也是以数组形式存在的,只要对它再进行
一次循环判断就可以了。防止以 方式注入的 $4 代码如下:
)+*%
+, 4+
+- #&"%/0' "(
)'+' 4(! "' #$%$((*"%
1请不要尝试进行 - 注入!