回复:

程序体(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