主题:  如何把特殊字符屏蔽掉

云中游

职务:普通成员
等级:2
金币:1.0
发贴:397
#12003/6/10 16:48:00
求助啊,我写了个注册会员系统,注册好后看网站内容需要登录才可以看,但是别人告诉我他只要把帐号和密码都输入a'or'a'='a,即使不注册也可以进去,他说只要把'等特殊字符屏蔽掉就可以解决此问题,我不知如何做



E人风

职务:普通成员
等级:1
金币:0.0
发贴:309
#22003/6/10 16:55:47
过滤……

    function JudgeString(strInput)
        dim strTemp
        dim i
        dim blnReturn
        strTemp = "'%?*‘"

        i = 0
        blnReturn = true
        
        do while i            if instr(1,strInput,mid(strTemp,i+1,1),0)>0 then
                blnReturn = false
                exit do
            end if
            i = i+1
        loop
        JudgeString = blnReturn
    end function
    



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#32003/6/10 17:27:32
一般情况下
strOutput=replace(strInput,"'","''")

有时候#字符也会提供攻击的可能性,如果想提高警戒级别,可以在某些输入中禁用这个字符



云中游

职务:普通成员
等级:2
金币:1.0
发贴:397
#42003/6/11 19:59:40
不是吧,一句话就可以搞定了?



绿茶

职务:普通成员
等级:8
金币:10.0
发贴:19267
#52003/6/11 20:17:36
我一般就这么用,如果只是取文本框的话
a=server.htmlencode(trim(request("a")))



绿茶

职务:普通成员
等级:8
金币:10.0
发贴:19267
#62003/6/11 20:19:41
像你这种注册系统,不要同时把用户名与密码一起验证,应分两步,这样就不用怕了



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#72003/6/13 10:03:44
即使先检查用户名后检查密码,一样可能被攻击。所以关键还是要过滤掉可能会产生攻击的字符。

server.htmlencode只在回显到浏览器时起作用,并不过滤'

关于分步验证的问题,好处是可以返回更多的出错信息。但这个同时也是一个坏处:攻击者可以知道他使用的用户名是否已经存在,如果存在,他只用尝试密码就可以了。所以我推荐的办法是,只要验证没通过,一律返回“拒绝访问”



水木

职务:普通成员
等级:1
金币:0.0
发贴:145
#82003/6/14 11:18:02
其实用REPLACE就是简单