利用instr()函数防止SQL注入攻击
我学习asp已经有一段时间了。这几天一直在写自己的程序,遇到了很多问题,不得不考虑一些现在的漏洞,比如‘or和1 = 1’之类的!不管别的,今天我就来说说怎么堵住这个漏洞!
记得看过一篇文章(看的时候不记得了),他用的是instr函数,应该是这样的。
如果instr(Request("id ")," ")> 0或instr(Request("id ")," ' ")> 0,则response.redirect "index.asp "
当然,你也可以在那之后写你想写的!忘了这个吧!
让我们先来学习instr函数:
语法
InStr([start,]string1,string2[,compare])
InStr函数的语法有以下参数:
参数说明
start是可选的。用于设置每次搜索的起始位置的数值表达式。如果省略,搜索将从第一个字符的位置开始。如果start包含Null,将会出现错误。如果指定了compare,则start参数是必需的。
String1是必需的。接受的字符串表达式。
String2
必需。要搜索的字符串表达式。
比较是可选的。一个数值,指示计算子字符串时使用的比较类型。有关数值,请参见“设置”部分。如果省略,将执行二进制比较。
compare参数可以有以下值:
常量值说明
vbBinaryCompare 0执行二进制比较。
vbTextCompare 1执行文本比较。
[返回值]
InStr函数返回以下值:
如果InStr返回
字符串1为零,长度为0
1 string1为Null Null。
2字符串2是零长度开始
2 string2为Null Null。
String2找不到0
在string1中查找string2,查找匹配字符串的位置。
start > Len(string2) 0
以下示例使用InStr搜索字符串:
要在其中进行搜索的字符串。
SearchChar = "P " '搜索“P”。
mypos = instr (4,searchstring,searchchar,1)'文本比较从第四个字符返回6。
mypos = instr (1,searchstring,searchchar,0)'二进制比较从第一个字符返回9。
mypos = instr (searchstring,searchchar)'返回9。
'默认值是二进制比较(最后一个参数被省略)。
mypos = instr (1,searchstring," w ")'二进制比较从第一个字符开始返回0(" w "未找到)。
请注意,InStrB函数使用字符串中包含的字节数据,因此InStrB返回的不是一个字符串在另一个字符串中第一次出现的字符位置,而是字节位置。
总结:instr的作用是:返回一个字符或字符串在另一个字符串中第一次出现的位置。好,让我们看看是哪个代码:
如果instr(Request("id ")," ")> 0或instr(Request("id ")," " ' " > 0,则
含义:比较请求(“id”)中字符(空 case)和字符(')的具体位置(用于二进制比较)。如果找到字符(空 case)和('),那么就是then之后的语句!
现在大家都明白这个意思了!
我第一眼看的时候就说,要是在asp里呢?Id=90加上字符(;或者,)等待某些字符时不是有样本错误吗?(是的,答案是肯定的:)
估计有人会说我给if instr (request ("ID ")," ")> 0或者instr (request ("ID ")," ' " > 0 then语句加一些字符,比如改成:if instr (request ("ID ")," ")> 0或者instr (request ( ) > 0或者instr (request ("ID "),"," > 0 then
等等,后面也可以加,呵呵!(这就好!但是很烂:)
没错,加了这个之后,真的可以让一些所谓的黑客相形见绌!
其实没必要。你忘了instr(Request("id ")," ")> 0这句话了吗?他还用(空 case)来对比!只要有这句话,和1 = 1对那些所谓的黑客来说不就没用了吗?
位律师回复
0条评论