全面防御:asp网站防 攻击 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    asp最脆弱的不是技术,而是防范 攻击,

全面防御:asp网站防 攻击

。而无论怎样攻击,通过QueryString和form,只要这两处防范好了,问题就解决了

    下面是我自家独创的一些代码,供大家参考

    一.防通过querystring的sql攻击

    一般sql能够攻击的页面通常是在参数为数字的页面

    1.首先我们做一个警告子过程

    '''''子过程功能:错误信息提示''''''''''''''''''

    '''''参数说明:errmsg 错误信息说明 var 处理方式 1返回不刷新 2返回上页 3关闭页面''''''''''''''''''

    Public sub alarm(errmsg,var)

    response.Write("")

    response.Write("

    ")

    response.Write("")

    response.Write("")

    response.Write("")

    response.Write("对于操作失败我们表示抱歉!

    如果仍有问题,请给我们发送错误报告

    ")

    response.Write("  操作失败的可能原因:

    ")

    response.Write("")

    response.Write("")

    response.Write("")

    response.Write(""&errmsg&"")

    response.Write("

    ")

    if var=1 then

    response.Write("")

    elseif var=2 then

    response.Write("")

    elseif var=3 then

    response.Write("")

    end if

    response.Write("

    ")

    response.Write("

    ")

    End Sub

    2.写一个验证数字的函数

    '''''函数功能:检测是否为数字并且数字是否有效''''''''''''''''''

    '''''返 回 值:boolean'''''''''''''''''''''''''''''''''''''''''

    Public function isInteger(para)

    if isnumeric(para)=false then isinteger=false

    dim str

    dim l,i

    if isNUll(para) then

    isInteger=false

    exit function

    end if

    str=cstr(para)

    if trim(str)="" then

    isInteger=false

    exit function

    end if

    l=len(str)

    for i=1 to l

    if mid(str,i,1)>"9" or mid(str,i,1)<"0" then

    isInteger=false

    exit function

    end if

    next

    isInteger=true

    end function

    3.写一个对querysting参数是否为数字的验证过程

    '''''''''''子过程功能,验证参数是否为数字

    '''''''''''参数说明:manage 处理方式:1=提示信息并关闭页面,2=转向页面,3=先提示再转向 redi 出错时转向的页面,str:接受检测的变量

    public sub integerok(manage,redi,str)

    if isinteger(str)=false then

    select case manage

    case 1

    response.Write("")

    case 2

    Response.Write ""

    case 3

    Response.Write ""

    end select

    end if

    end sub

    4.写一个对qureystring整体验证的子过程

    '''''''''''参数说明:manage 处理方式:1=提示信息并关闭页面,2=转向页面,3=先提示再转向 redi 出错时转向的页面

    public sub saferush(manage,redi)

    Dim my_Url,my_a,my_x,my_Cs(),my_Ts 'my_url:转接过来的url地址 my_a:获取url地址中用&隔开的字符串数组

    my_Url=Request.ServerVariables("QUERY_STRING") 'my_x:interger my_cs()动态数组

    my_a=split(my_Url,"&")

    redim my_Cs(ubound(my_a))

    On Error Resume Next

    for my_x=0 to ubound(my_a)

    my_Cs(my_x) = left(my_a(my_x),instr(my_a(my_x),"=")-1)

    Next

    For my_x=0 to ubound(my_Cs)

    If my_Cs(my_x)<>"" Then

    If Instr(LCase(Request(my_Cs(my_x))),"'")<>0 or Instr(LCase(Request(my_Cs(my_x))),"and")<>0 or Instr(LCase(Request(my_Cs(my_x))),"select")<>0 or Instr(LCase(Request(my_Cs(my_x))),"update")<>0 or Instr(LCase(Request(my_Cs(my_x))),"chr")<>0 or Instr(LCase(Request(my_Cs(my_x))),"delete%20from")<>0 or Instr(LCase(Request(my_Cs(my_x))),";")<>0 or Instr(LCase(Request(my_Cs(my_x))),"insert")<>0 or Instr(LCase(Request(my_Cs(my_x))),"mid")<>0 Or Instr(LCase(Request(my_Cs(my_x))),"master.")<>0 Then

    Select Case manage

    Case "1"

    Response.Write ""

    Case "2"

    Response.Write ""

    Case "3"

    Response.Write ""

    End Select

    Response.End

    End If

    End If

    Next

    end sub

    好了下面举实例说明:

    假设存在一个webasp.net/tech/admin_news_tg.asp?class=1">http://www.webasp.net/tech/admin_news_tg.asp?class=1的页面

    可以如此防范

    call saferush(2,"../")

    classid = Request.querystring("classid")

    call integerok(2,"../",classid)

    二.对表单提交进行防范

    sub safeform(var)

    form_Badword="'∥%∥&∥*∥#∥@∥(∥)∥=" '在这部份定义post非法参数,使用"∥"号间隔

    On Error Resume Next

    if request.form<>"" then

    Chk_badword=split(form_Badword,"∥")

    FOR EACH name IN Request.form

    for i=0 to ubound(Chk_badword)

    If Instr(LCase(request.form(name)),Chk_badword(i))<>0 Then

    if var=1 then

    Response.Write ""

    elseif var=2 then

    qczc.Err_List"

    出错了!在您提交的表单中包含非法字符串

    请不要在表单中出现非法的字符串

    在此过程中,我们已将您的IP记录在案",1

    end if

    Response.End

    End If

    NEXT

    NEXT

    end if

    end sub

    使用方法,只要在提交表单的页面头部加一条语句就可以了

最新文章