以下是引用任我行在2006-6-8 18:47:56的发言:只要是数字的.我们都再进一步过滤
KSCMS.ChkClng这个函数.可以堵住大部的注入
还有一个
KSCMS.ReplaceBadChar
所以,注入还是比较难的
KSCMS.ReplaceBadChar?????????
这是它的原码:
Public Function ReplaceBadChar(strChar)
If strChar = "" Or IsNull(strChar) Then ReplaceBadChar = "":Exit Function
Dim strBadChar, arrBadChar, tempChar, I
strBadChar = "',%,^,&,?,(,),<,>,[,],{,},/,\,;,:," & Chr(34) & "," & Chr(0) & ""
arrBadChar = Split(strBadChar, ",")
tempChar = strChar
For I = 0 To UBound(arrBadChar)
tempChar = Replace(tempChar, arrBadChar(I), "")
Next
ReplaceBadChar = tempChar
End Function
这个函数只对特殊符号作出处理,但未去字符,如and,or,select进行处理,虽然不能直接用来注入,但去可以用这个漏洞来制造垃圾数据,按照上面说的,我把检测代码换为:
Case "Add"
Dim RSAdd,anid
InfoID=KSCMS.ReplaceBadChar(KSCMS.G("InfoID"))
Anid=KSCMS.ReplaceBadChar(KSCMS.G("Anid"))
之后再在地址栏里进行测试,发现一些符号已经不能用了。但是如果我加上ReplaceBadChar()函数限制以外的字符,如abcd....这些,结果同样可以写进数据库,而且在收藏里也见不着,只有打开数据库才看得见。
如果我加上KSCMS.ChkClng检测数字,使上面语句变为
Case "Add"
Dim RSAdd,anid
InfoID=KSCMS.ChkClng(KSCMS.ReplaceBadChar(KSCMS.G("InfoID")))
Anid=KSCMS.ChkClng(KSCMS.ReplaceBadChar(KSCMS.G("Anid")))
这里虽然把字符abcd....等等给过滤了,但看看那个函数的源码
'检查是否是数字 ,并转换为长整型
Public Function ChkClng(ByVal str)
If str<>"" and IsNumeric(str) Then
ChkClng = CLng(str)
Else
ChkClng = 0
End If
End Function
这个函数只把不符合规则的字符变为0
而我们如果在收藏页的地址栏中,再进行乱字符的提交的话,所提交的有乱字符的参数就变为0,而且同样能够写入数据库,目前,我用了别人的防注入函数,不过感觉既然是用你的,还是想全用你们的,希望你们给一个更好的函数出来
[此贴子已经被作者于2006-6-9 10:07:50编辑过]