|
让我们还是从最简单的开始:
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
程序体(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
|