当前位置: 首页 > 图文教程 > 网络安全 > 安全基础 > 网页脚本攻击防范全攻略(4)

安全基础
入侵常用TCP端口作用及其操作建议之二十九
玩转XP系统中的一些另类卸载
移动硬盘常见问题的解决(1)
移动硬盘常见问题的解决(2)
使用RSS能做的十六件事
Win XP系统19例常见问题(1)
Win XP系统19例常见问题(2)
Win XP系统19例常见问题(3)
Win XP系统19例常见问题(4)
企业安全管理从IP地址开始
计算机取证常识
深入剖析EFS
WinXP另类垃圾的清理(1)
WinXP另类垃圾的清理(2)
WinXP另类垃圾的清理(3)
WinXP另类垃圾的清理(4)
给Windows XP标题栏瘦瘦身
体验Windows XP的网络视频会议(1)
体验Windows XP的网络视频会议(2)
交换网络中的嗅探和ARP欺骗

安全基础 中的 网页脚本攻击防范全攻略(4)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-28   浏览: 75 ::
收藏到网摘: n/a

  对于一些整机使用的站点来说防止通过80端口攻击而直接拿到整机管理权限,这一点就变得至关重要了。对xp_cmdshell 的过滤就成为首要,很多站点的程序都是用GET或者是GET与POST混合来提交数据的,对于此,我们给出一种防止GET进行SQL注入的程序:如

程序体(5)

  fqys=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 i= 0 to ubound(nothis)
  if instr(FQYs,nothis(i))<>0 then
  errc=true
  end if
  next
  if errc then
  response.write ""
  response.end
  end if

  我要做点声明的是:以上的程序只是对GET方式提交的数据进行的过滤,千万不要盲目套用。

  像其他一些来自 ASP request 对象 (Reques、Request.QueryString、Request.Form、Request.Cookies和 Request.ServerVariables) 的用户输入的攻击方法的方法,大致都集中在脚本期望的输入变量是数字变量 (ID) 上,当然我们不能只看数字变量,比如:

  http://127.0.0.1/systembbs/showtopic.asp?tid=99&name=abc' and left(userpasswor d,1)='a

  http://127.0.0.1/systembbs/addtopic.asp?tid=99&name=abc' and userpasswor d=’or’’=’

  另外,如何单一的防止类似这样的注入错误?

  http://127.0.0.1/systembbs/addtopic.asp?tid=99’ ;delete forum_forum;--&page=33 防范程序: 程序体(6)

  ……addtopic.asp?action=add……
  ……addtopic.asp?action=delect……
  Action1=trim(Request.QueryString())
  if left(action1,7)<>"action=" then '限定querystring必须为 action=
  error(err01)'错误处理
  else
  action=Request.querystring("action")'取得querystring的值
  end if
  select case action'对querystring进行处理
  case "add"
  .....
  case "delete"
  ......
  case else '如果querystring没有这个值则进行错误处理
  error(err02)
  end select

  程序体(6)

  出现这样的攻击,使我们的站长们不得不又再次头痛,这里我可以给出大家一个解决最好办法,一般的来说,用户名长度字符数不会超过15个字符,大都为14字符。那么我们从长度出发,来进行过滤:如程序体(7)

  Name=replace(name,”’”,””)
  If len(name)>16 then
  Response.write “ 你要做什么?”
  Response.end
  End if

  程序体(7)

  为什么我们这里以及过滤了单引号,怎么还要再次取一个长度限制呢?不多说了,看看4ngel的文章先<<饶过'限制继续射入>> .别问我怎么转数字格式,我不会,嘿嘿…^_^!

  还继续回到我们的主题,” 脚本期望的输入变量是数字变量 (ID)”.怎样进行注入防范,天呐,方法太多了,最直接的就是判断是否是数字整型,还有一些比较个性的验证办法,我们一一介绍一下 如:程序体(8)

  一,判断数字是否是整型

  p_lngID = CLng(Request("ID"))

  二 取字长 这一点我相信一般的数据长度不会大于8位所以:

  If len(ID)>8 then
  response.write “bedpost”
  response end
  end if