如何判断客户端浏览器的脚本js.vbs功能是否被禁止,通过隐藏域实

来源:岁月联盟 编辑:zhuzhu 时间:2003-07-11
客户端验证是我们经常在用户递交表单前进行的工作,它可以有效的减轻服务器的负担

但是有的用户禁止了活动脚本的执行,给我们的验证和系统安全带来了一定的危险性.

举个列子;
就象刚才有个朋友问的那样,如何判断用户上传的文件是不是网站所要求的文件类型呢?
在服务器端判断可以,但会很烦琐.如果用客户端活动脚本js,或vbs来判断就好多了.
下面就是我针对这个列子写的具体实现方法


可以将客户端的验证的执行情况反映给服务器,由此我们来判断他传的是不是我们所要求的文件类型


<html>
<head>
<title>...::小熊在线::... @ 即时报价 与 管理系统      制作 :NetNice 技术支持:Www.chinaok.net..... </title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style TYPE="text/css">
BODY{FONT-SIZE: 9pt}
TD{FONT-SIZE: 9pt}
.tbljm{BORDER-BOTTOM: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid;color:#000000;}
</style>
<script language="Javascript">
function check()
{var upno=0;
var info="";
var ncd=document.form1.file1.value
var nstr="";
if (ncd!=""){
nstr=findname(ncd);
if (ncd.indexOf(".gif")=-1) nstr="";
if (ncd.indexOf(".jpg")=-1) nstr="";
if (ncd.indexOf(".exe")=-1) nstr="";
if (nstr==""){alert("你要上传的文件类型不对,或路径错误~!/n请重新选择");return false;}
}
}
flag=window.confirm("你要上传的文件是: /n"+info+"/n");
return flag;
}
function findname(vl)
{//验证路径是否合法,
var no0=vl.lastIndexOf("//");
var no1=vl.lastIndexOf(".");
var no2=vl.indexOf(":");
if (no0==-1 || no1==-1 || no2!=1 || no0>no1) return ;
var fname=vl.substr(no0+1);
return fname;
}

function form_onsubmit(obj)
{ check()
  document.form1.jscan.value="true";
  return true;
}
</script>
</head>

<body bgcolor="#ffffff" text="#000000" valign="center" onload="javascript:document.form1.ok.blur()">
<br>
<table width="200" border="0"  style="BORDER-RIGHT: #003366 1px solid; BORDER-TOP: #003366 1px solid; BORDER-LEFT: #003366 1px solid; BORDER-BOTTOM: #003366 1px solid" cellspacing="0" cellpadding="0" align="center">
  <tr>
    <td bgcolor="#304d7c" height="25">
      <div align="center"><font color="#ffffff">请选择文件</font></div>
    </td>
  </tr>
  <tr>
    <td height="121">
<form name="form1" method="post" action="save.asp" onSubmit="return form_onsubmit(this)" >
              
      <table width="199" border="0" cellspacing="0" cellpadding="0" background="images/greystrip.gif">
        <tr>
            <td height="35">
              <div align="center">
                <p align="center">文件名:
                <input name="file1" type=file class=tbljm>
                <input name="jscan" value="false" type=hidden><!--这个隐藏的域的初值为false,通过js改变它的值 ,在服务器端通过接受 这个域的值来判断js是否执行 :) -->
            </div>
          </td>
        </tr>
        <tr>
            <td height="40">
              <div align="center">
                <p align="center">
                <input type="submit" name="ok" value="上传" class=tbljm>
                <input type="reset" name="nook" value="重 写" class=tbljm><BR><br><font color=red>请不要随意的进入本系统</font><br></div>    
          </td>
        </tr>
      </table>
    </form></td>
  </tr>
</table>
<p align="center"> </p>
<p align="center"> </p>
<table border=0 cellpadding=0 cellspacing=0 width=750 align="center">                                                           
  <tbody>                                                            
  <tr align=middle>                                                            
    <td >
      <p align=center>系统制作:<a href="mailto:netnice@chinaok.net">NetNice</a>
      Oicq:6097356<br>
        版权所有:小熊在线-东北站<br>
        Copyright (C) 2001 www.Sybears.com All Rights Reserved</p>                                                             
    </td>                                                           
  </tr>                                                           
  </tbody>                                                            
</table>
</body>
</html>


========================save.asp================
<%Response.Expires=0
dim jscan,user,pwd
jscan=request.form("jscan")
if jscan="false" then
response.redirect "err.asp?estr='请打开您的浏览器的脚本执行权限'"
end if


'略...,仅是为了演示如何判断客户端的活动脚本js或vbs是否执行
'就这个例子而言是有漏洞的.请不要完全依靠这个来判断用户上传文件的类型.
'匆匆帖出,也许有错误:)

'THE END