论坛风格切换
 
  • 帖子
  • 日志
  • 用户
  • 版块
  • 群组
帖子
购买邀请后未收到邀请联系sdbeta@qq.com
  • 1508阅读
  • 0回复

[求助-网络问题]全面防御:asp网站防黑客攻击 [复制链接]

上一主题 下一主题
离线haozhao
 
发帖
*
今日发帖
最后登录
1970-01-01
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-09-21 11:05:12
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

  好了下面举实例说明:

  假设存在一个http://www.hack58.com/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

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