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

安全基础
可以用于交换环境下SNIFFER的几种攻击技术手段
嗅探的时候,防火墙能发现吗?
wincap and sniffer(1)
wincap and sniffer(2)
客户端登录到Win 2000域
网络故障问答集萃
软件开发项目控制浅谈(1)
软件开发项目控制浅谈(2)
软件开发项目控制浅谈(3)
软件开发项目控制浅谈(4)
用Telnet快速收发电子邮件(1)
用Telnet快速收发电子邮件(2)
Windows XP系统启动提速专题
让Google长个好“记性”
恢复EXE文件关联补完版
真真假假的安全警告
网络安全应急三观
全力打造个人网络安全
系统自动启动程序之十大藏身之所
访问权限问题问答集锦

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-28   浏览: 81 ::
收藏到网摘: 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