• 代码发布!两个小函数让你的ASP程序对SQL注入免疫! PENGHAO


    Rem  ##  长整数转换 
    Function  toNum(s,  default) 
               If  IsNumeric(s)  and  s  <>  ""  then 
                           toNum  =  CLng(s) 
               Else 
                           toNum  =  default 
               End  If 
    End  Function 
     
    Rem  ##  SQL  语句转换 
    Function  toSql(str) 
               If  IsNull(str)  Then  str  =  "" 
               toSql  =  replace(str,  "'",  "''") 
    End  Function 
     
    示例: 
    Dim  sql 
    Dim  strWhere,  strName,  intAge
    strName = toSql(request("user"))
    intAge  = toNum(request("age"),  20)
    sql  =  "SELECT  *  FROM  [USER]"  &  _ 
               "WHERE  [AGE]  >  "  & strName &  _ 
               "  AND  [USERNAME]  =  '"  & intAge &  "'"

    一般情况下, 通过上面两个函数的过虑, 可以杜绝网上的SQL注入攻击!如果你觉得有需要, 可以加上对chr(0)的替换, 将toSql函数改为如下:
    Function  toSql(str) 
               If  IsNull(str)  Then  str  =  "" 
               str =  replace(str, chr(0),  "") 
               toSql  =  replace(str,  "'",  "''") 
    End  Function

    另注:

    ***********************************************************************
    检测外部提交的函数
    Function CheckUrlRefer()
       Dim strLocalUrl, intUrlLen, strUrlRefer
       strLocalUrl = "http://127.0.0.1"
       intUrlLen = Len(strLocalUrl)
       strUrlRefer = LCase(request.ServerVariables("HTTP_REFERER") & "")
       '检测前一个页面是否来自 strLocalUrl
       If Left(strUrlRefer, intUrlLen) = strLocalUrl Then
         CheckUrlRefer = True
       Else
         CheckUrlRefer = False
       End If
    End Function
    ***********************************************************************
    该函数可以帮助你抵挡外部的SQL注入测试, 只需要在页面的头部调用即可.

    通过简单的两个小函数, 让你的ASP程序更安全!

    欢迎高手指正(请将绕过这两个函数的方法写出来)!

    相关讨论页面:
    http://community.csdn.net/Expert/TopicView.asp?id=3585010
    http://community.csdn.net/Expert/TopicView.asp?id=3582230

    http://community.csdn.net/Expert/topic/3589/3589480.xml?temp=.4866449
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////

    dim qs,errc,iii
    qs=request.servervariables("query_string")
    dim nothis(18)
    nothis(0)="net user"
    nothis(1)="xp_cmdshell"
    nothis(2)="/add"
    nothis(3)="exec%20master.dbo.xp_cmdshell"
    nothis(4)="net localgroup administrators"
    nothis(5)="select"
    nothis(6)="count"
    nothis(7)="asc"
    nothis(8)="char"
    nothis(9)="mid"
    nothis(10)="'"
    nothis(11)=":"
    nothis(12)=""""
    nothis(13)="insert"
    nothis(14)="delete"
    nothis(15)="drop"
    nothis(16)="truncate"
    nothis(17)="from"
    nothis(18)="%"
    errc=false
    for iii= 0 to ubound(nothis)
    if instr(qs,nothis(iii))<>0 then
    errc=true
    end if
    next
    if errc then
    Response.Write("对不起,非法URL地址请求!")
    response.end
    end if

    ***************************************************************

    当然这方法做得太“绝”了,但是我也是没有办法啊。这个方法是在网上看到的,运行于一个网站上,现在一切良好。为了安全我只能这样。我想只要有关SQL的敏感单词都进行过滤掉应该没有什么吧,当然像楼主的做到那一步是基本上可以了,可以修补一下用用。记得我最初用的是《SQL注入天书》上面提供的防范方法,后来才改用这个。
    将我以前用的代码也帖出来供参考,大家有兴趣可以去百度或GOOGLE中搜索一下《SQL注入天书》了解

    使用这个函数,对客户端提交来的数据进行验证。。。

    <%
     Function SafeRequest(ParaName,ParaType)
           '--- 传入参数 ---
           'ParaName:参数名称-字符型
           'ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)

           Dim ParaValue
           ParaValue=Request(ParaName)
           If ParaType=1 then
                  If not isNumeric(ParaValue) then
                         Response.write "参数" & ParaName & "必须为数字型!"
                         Response.end
                  End if
           Else
                  ParaValue=replace(ParaValue,"'","''")
           End if
           SafeRequest=ParaValue
    End function

    %>

  • 相关阅读:
    bzoj 4237 稻草人
    bzoj 4537 最小公倍数
    POJ 2763 Housewife Wind(树链剖分)(线段树单点修改)
    HDU 3966 Aragorn's Story(树链剖分)(线段树区间修改)
    spoj 913 Query on a tree II (倍增lca)
    spoj 375 Query on a tree (树链剖分)
    hiho一下第133周 2-SAT·hihoCoder音乐节(2-SAT)(强连通)
    hiho一下第131周 后缀自动机二·重复旋律8(循环相似子串)
    hiho一下第130周 后缀自动机二·重复旋律7
    hiho一下第129周 后缀自动机二·重复旋律6
  • 原文地址:https://www.cnblogs.com/Dove/p/111704.html
Copyright © 2020-2023  润新知