得到了管理员的密码也就意味着已经控制的整站,虽然不一定能得到主机的权限,但也为这一步做了很大的铺垫。类似的SQL Injection攻击的方式方法很多,对不同的文件过滤不严密所采取的查询方式也不同。所以说想做好一个完整的字符过滤程序不下一凡功夫是不可能的。
  4. 远程注入攻击
  某站点的所谓的过滤只是在提交表格页上进行简单的JS过滤。对于一般的用户来说,你大可不必防范;对早有预谋的攻击者来说,这样的过滤似乎根本没作用。我们常说的POST攻击就是其中一例。通过远程提交非法的信息以达到攻击目的。
  通过上面的攻击方法的介绍,我们大致的了解了攻击者的攻击途径,下面我们就开始重点的介绍,如何有效的防范脚本攻击!
  让我们还是从最简单的开始:
  l 防范脚本攻击
  JS脚本 和HTML脚本攻击的防范其实很简单:server.HTMLEncode(Str)完事。当然你还不要大叫,怎么可能?你让我把全站类似<%=uid%>都加过滤我还不累死?为了方便的过滤,我们只需要将HTML脚本和JS脚本中的几个关键字符过滤掉就可以了:程序体(1)如下:
  ‘以下是过滤函数
  <%
  function CHK(fqyString)
  fqyString = replace(fqyString, “>“, “>“)
  fqyString = replace(fqyString, “<“, “<“)
  fqyString = replace(fqyString, ““, “&“)
  fqyString = Replace(fqyString, CHR(32), “ “)
  fqyString = Replace(fqyString, CHR(9), “ “)
  fqyString = Replace(fqyString, CHR(34), “““)
  fqyString = Replace(fqyString, CHR(39), “’“)
  fqyString = Replace(fqyString, CHR(13), ““)
  fqyString = Replace(fqyString, CHR(10) & CHR(10), “</P><P> “)
  fqyString = Replace(fqyString, CHR(10), “<BR> “)
  CHK = fqyString
  end function
  %>
  ‘以下是应用实例
  <%=CHK(Username)%>
  Username=CHK(replace(request(“username”),”’”,””))
  使用Include把函数写在公有页面上,这样效率是最好的。
  程序体(1)
  另外,值得我们注意的是,很多站点在用户注册,或者是用户资料修改的页面上也缺少脚本的过滤,或者是只在其中之一进行过滤,注册进入后修改资料仍然可以进行脚本攻击。对用户提交的数据进行检测和过滤,程序体(2) 如下:
  ‘以下是过滤函数
  If Instr(request(“username“),“=“)>0 or
  Instr(request(“username“),“%“)>0 or
  Instr(request(“username“),chr(32))>0 or
  Instr(request(“username“),“?“)>0 or
  Instr(request(“username“),“&“)>0 or
  Instr(request(“username“),“;“)>0 or
  Instr(request(“username“),“,“)>0 or
  Instr(request(“username“),“’“)>0 or
  Instr(request(“username“),“?“)>0 or
  Instr(request(“username“),chr(34))>0 or
  Instr(request(“username“),chr(9))>0 or
  Instr(request(“username“),“?K“)>0 or
  Instr(request(“username“),“$“)>0 or
  Instr(request(“username“),“>“)>0 or
  Instr(request(“username“),“<“)>0 or
  Instr(request(“username“),““““)>0 then
  response.write “朋友,你的提交用户名含有非法字符,请更改,谢谢合作 <a href=’****:window.history.go(-1);’>返回</a>“
  response.end
  end if