zoukankan      html  css  js  c++  java
  • 代码发布!两个小函数让你的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

    %>

  • 相关阅读:
    poj2528 Mayor's posters(线段树区间修改+特殊离散化)
    codeforces 733D Kostya the Sculptor(贪心)
    codeforces 733C Epidemic in Monstropolis
    poj 2828--Buy Tickets(线段树)
    lightoj 1125
    HDU 2795 Billboard (线段树)
    hdu 5945 Fxx and game(dp+单调队列! bc#89)
    poj3666 Making the Grade(基础dp + 离散化)
    codeforces 652D
    lightoj 1140
  • 原文地址:https://www.cnblogs.com/Dove/p/111704.html
Copyright © 2011-2022 走看看