客戶端驗證是我們經常在用戶遞交表單前進行的工作,它可以有效的減輕服務器的負擔
但是有的用戶禁止了活動腳本的執行,給我們的驗證和系統安全帶來了一定的危險性.
舉個列子; 就象剛才有個朋友問的那樣,如何判斷用戶上傳的文件是不是網站所要求的文件類型呢? 在服務器端判斷可以,但會很煩瑣.如果用客戶端活動腳本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
|