以下是根据我对反注入的经验的,和专门从事注射入侵的朋探讨后,在绝对安全的前提下,过滤得最少,最友好的防注入方法。总结为三个函数:1.数字型变量:用isNumeric()判断是否为数字'----------------------------------------------------------------
' 获取数字型参数
'----------------------------------------------------------------
Function ReqNum ( StrName )
    ReqNum = Request ( StrName )
    if not isNumeric ( ReqNum ) then
        response.write "参数必须为数字型!"
        response.end
    end if
End Function
2.字符型或其它类型变量:将单引号'替换成两个,这个没啥问题,相信都会。'----------------------------------------------------------------
' 获取字符型参数
'----------------------------------------------------------------
Function ReqStr ( StrName )
    ReqStr = Replace ( Request(StrName), "'", "''" )
End Function3.这个函数非常关键,结合第二个函数,用来代替ASP的Request函数。Function sqlstr(data)          '过滤字符串
  data = Trim(Replace(Request(data), "&", "&"))
  data = replace(data, "<", "&lt;")
  data = replace(data, ">", "&gt;")
  data = replace(data, "'", """")
  data = replace(data, "*", "")
  data = replace(data, "?", "")
  data = replace(data, "select", "")
  data = replace(data, "insert", "")
  data = replace(data, "delete", "")
  data = replace(data, "update", "")
  data = replace(data, "delete", "")
  data = replace(data, "create", "")
  data = replace(data, "drop", "")
  data = replace(data, "declare", "")
  data = replace(data, vbCrLf&vbCrlf, "</p><p>")
  data = replace(data, vbCrLf, "<br>")
  sqlstr = (data)
End Function
如果你觉得还差一些,可以自己添。第三个函数非常重要,希望你能在用第二个函数过滤的地方尽快附加使用上。不要怕麻烦,切记一定要更新一下你的代码,切记,重要!!!
以上三个函数,只要对每处输入的地方都使用这两个函数取值,以现在的入段,SQL注入根本没有用武之地.

解决方案 »

  1.   

    只用想想,如果CSDN用这个防注入式漏洞的话,楼主的东西还能发出来么?
      

  2.   

    这样用问题多多,不如 parameter query
      

  3.   

    这牛人还真是能扯!!!!!!!!
    第三个函数的数据根本就没有还原的可能性,设计上就有问题
    ======================================================
    本人大四,下学期找工作了,各位兄弟帮帮忙
    我的简历:http://202.118.70.40/winal/introduce.aspx
    ======================================================
      

  4.   

    仅仅用替换是肯定不够的,至少特定的db有特定的很多函数,你没法识别的,这些函数完全可以被利用来作注入,还是应该走正路,用dbparameter!
      

  5.   

    SQL注入根本没有用武之地?我看是很容易就能被注入!真没意思,赶快闪~
      

  6.   

    只需把'替换成''就行了,如果确定为数值型就Convert.ToInt16();就行了
    第三个根本是夸大了
    在sql语句中,只要把'替换了,一切insert/select/delete/drop都会被当成字符串处理,而不会当成SQL中的关键字.
    太敏感了吧
      

  7.   

    我喜欢防患于未然,尽量在输入的文本被处理被折腾得安全了之后再操作,xixi:)
      

  8.   

    回复人: Ivony() ( ) 信誉:100  2005-08-17 11:34:00  得分: 0  只用想想,如果CSDN用这个防注入式漏洞的话,楼主的东西还能发出来么?-------------------------------------------------------------------------说的实在
      

  9.   

    有第二个了,还要第三个做什么呢???
    回复人: Ivony() ( ) 信誉:100 2005-08-17 11:34:00 得分: 0只用想想,如果CSDN用这个防注入式漏洞的话,楼主的东西还能发出来么?-------------------------------------------------------------------------很对也。
      

  10.   

    用参数吧.ASP方便.用参数不方便..asp.net用参数方便啊
      

  11.   

    牛真是牛, 就是破坏了数据的完整性, 还是 dushizhuma(杨正祎) 说的对 : 因地制宜,不宜乱用。
      

  12.   

    回复人: Ivony() ( ) 信誉:100  2005-08-17 11:34:00  得分: 0  只用想想,如果CSDN用这个防注入式漏洞的话,楼主的东西还能发出来么?
      

  13.   

    Function ReqNum ( StrName )
        ReqNum = Request ( StrName )
        if not isNumeric ( ReqNum ) then
            response.write "参数必须为数字型!"
            exit function
        end if
    End Function最好不要用response.end
    象上边的才象函数,哈哈
      

  14.   

    告诉大家,那个牛人是自称是做网络安全N年的人,同时负责N台服务的安全运行,自称差点就成为MVP,后来不想拿就隐退,专职帮人家管服务器了!最让我不服气的是他对我说:
    "你做我的徒弟是没希望了!"说真的,我当时真有扁他的冲动!:)
      

  15.   

    告诉大家,那个牛人是自称是做网络安全N年的人,同时负责N台服务的安全运行,自称差点就成为MVP,后来不想拿就隐退,专职帮人家管服务器了!最让我不服气的是他对我说:
    "你做我的徒弟是没希望了!"说真的,我当时真有扁他的冲动!:)
    他再管十年也甭想拿到MVP。MVP是专门授予那些在技术论坛或线下活动中交流微软相关技术,乐于助人、技术高超、表现突出的专家。首先乐于助人就没戏了,技术高超也是吹的,管服务器管一辈子也难以表现突出。
      

  16.   

    防SQL注入式攻击用得着这样么
    使用parameter和存储过程相结合就可以防范了
      

  17.   

    晕,MVP是什么》?就是一个比你多被老板强奸了几年,多看了几年MSDN的家伙,个别优秀的可以看英文版的MSDN