资料整理

 

防范脚本攻击

一. 防范脚本攻击

   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"),"") 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

  程序体( 2

  为了提供工作效率我们再将过滤内容程序化,这样对多个参数的过滤效率将有很大程度上的提高:如

  程序体( 3

   以下为程序主体

   dim Bword(18)
   Bword(0)="?"
   Bword(1)=";"
   Bword(2)=" "
   Bword(3)=" "
   Bword(4)="-"
   Bword(5)="’"
   Bword(6)="””"
   Bword(7)="&"
   Bword(8)="%"
   Bword(9)="$"
   Bword(10)="'"
   Bword(11)=":"
   Bword(12)="   "
   Bword(13)="("
   Bword(14)=")"
   Bword(15)="--"
   Bword(16)=" chr(9)"
   Bword(17)=" chr(34)"
   Bword(18)=" chr(32)"
   errc=false

   以下是应用实例部分

   for i= 0 to ubound(Bword)
   if instr(FQYs,Bword(i)) <> 0 then
   errc=true
   end if
   next
   if errc then
   response.write " script language=""****"" "
   response.write "parent.alert(' 很抱歉 ! 您的操作违法了 );"
   response.write "history,back();"
   response.write " /script "
   response.end
   end if

  程序体( 3

  有了上面的过滤函数您可以在任何需要过滤的地方应用过滤函数直接使用就可以了。这就使我们的修复工作大大的简化了。

  另外,我想在这里再次多提醒一下,一些站点的 UBB 在进行小的表情图标转化时也会出现过滤问题,由于很隐蔽所以不容易发现:

  如:

  我们标签内的文字进行修改,

  不知道各位看懂没,前一个单引号用来中和程序提供的左引号,第二个单引号用来中和闭合的右引号,这样程序输出就为:

  < img src=’img/0001.gif’ onerror=****:alert(); alt=’’

  如果图片不存在,那么将激活 onerror 标签执行脚本程序。对于已经过滤了单引号的站点在这里用双引号一样可以完成。对于过滤了 **** 字段的,只用 alert() 也完全可以。所以说要过滤就要过滤完全,别给攻击者留下一丝机会。

posted on 2006-07-17 16:54 谢玮 阅读(221) 评论(0)  编辑  收藏 所属分类: java应用程序Web操作系统与网络


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(1)

随笔档案

文章分类

文章档案

搜索

最新评论