客户端验证是我们经常在用户递交表单前进行的工作,它可以有效的减轻服务器的负担
但是有的用户禁止了活动脚本的执行,给我们的验证和系统安全带来了一定的危险性.
举个列子; 就象刚才有个朋友问的那样,如何判断用户上传的文件是不是网站所要求的文件类型呢? 在服务器端判断可以,但会很烦琐.如果用客户端活动脚本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>
</form></td> </tr>
<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>
</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
|