防止sql注入攻击:利用instr()函数防止SQL注入攻击

  学asp也有段时间了这几天直在写自己也遇到了好多问题我就不得不得考虑到些现在漏洞比如‘ 或 and 1=1等等些漏洞!别先不管今天我就来说说如何堵这个漏洞!

  记得看了篇文章(不记得什么时候看了)他用到了instr这个具体应该是这样

If instr(Request("id")," ")>0 or instr(Request("id"),"'")>0 then response.redirect "index.asp"

  当然也也可以在then后面写你想要!这个先不管!

  让我们先来学习instr这个吧:

  语法

InStr([start, ]1, 2[, compare])  

  InStr 语法有以下参数:

参数 描述
start 可选数值表达式用于设置每次搜索开始位置如果省略将从第位置开始搜索如果 start 包含 Null则会出现如果已指定 compare则必须要有 start 参数  
String1 必选接受搜索串表达式  
String2  
必选要搜索串表达式  
Compare 可选指示在计算子串时使用比较类型数值有关数值请参阅"设置"部分如果省略将执行 2进制比较
compare 参数可以有以下值:
常数 值 描述
vbBinaryCompare 0 执行 2进制比较
vbTextCompare 1 执行文本比较  

  [返回值]

  InStr 返回以下值:

  如果 InStr 返回

  1 为零长度 0

  1 为 Null Null

  2 为零长度 start

  2 为 Null Null

  2 没有找到 0

  在 1 中找到 2 找到匹配位置

  start > Len(2) 0

  下面举例利用 InStr 搜索串:

Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP" ' 要在其中搜索
SearchChar = "P" ' 搜索 "P"
MyPos = Instr(4, SearchString, SearchChar, 1) '文本比较从第 4个开始返回 6
MyPos = Instr(1, SearchString, SearchChar, 0) ' 2进制比较从第1个开始返回 9
MyPos = Instr(SearchString, SearchChar) ' 返回 9
' 缺省为 2进制比较(最后个参数省略)
MyPos = Instr(1, SearchString, "W") ' 2进制比较从第1个开始返回 0 (没有找到 "W")  

  注意 InStrB 使用包含在串中字节数据所以 InStrB 返回不是串在另串中第次出现位置而是字节位置

  整理总结概括:instr功能就是: 返回串在另串中第次出现位置好了让我们在看看哪个代码:

instr(Request("id")," ")>0 or instr(Request("id"),"'")>0 then  

  含义:比较 (空格)和(')在request("id")中具体位置(进行 2进制制比较)假如找到了(空格)和(‘)那么就是then 后语句!

  现在大家理解这个含义了吧!

  当我看第时候我就说假如在asp?Id=90加上(;或,)等等时不是造样出错吗?(是回答肯定:)

  估计又有人说那我会在 instr(Request("id")," ")>0 or instr(Request("id"),"'")>0 then 语句中在加些比如改为: instr(Request("id")," ")>0 or instr(Request("id"),"'")>0 or instr(Request("id"),";")>0 or instr(Request("id"),", ")>0 then
等等你还可以在后面加呵呵!(这个好啊!不过比较烂:)
这样加上后确实能桃过些所谓黑客们

  其实没必要大家忘了instr(Request("id")," ")>0这句话了吗他还和(空格)比较了啊!只要有这句话那些所谓黑客们and 1 = 1 不就没用了吗? 
Tags:  asp防注入函数 vbinstr函数 instr函数 防止sql注入攻击

延伸阅读

最新评论

发表评论