基本思路:
為每一個功能寫一個獨立的程序,程序頁
盡可能少的讓客戶了解你的服務器端信息
不要用"客戶應該這麼寫"這個思路想問題
盡可能多的想到不可能發生的事情
1.關於交互式動態網頁可能存在的問題
1.1form類型的交互
1.1.1概念介紹
在我們和瀏覽者進行交互時,最常用到的就是form(post/get/put方法),雖然非常方便,但是很多問題也是因他而起。
form表單中input標誌
用來接受用戶輸入的信息,例如:用戶名、密碼、email等。如果你沒有對用戶輸入進行很好的檢查的話,一個惡意的用戶
會屏蔽掉一些安全機
制,繞過安全認證。例如,輸入標準的HTML語句或者javascript語句會改變輸出結果,在輸入框中打入標準的HTML語句會
得到什麼樣的結果呢?比如一個留言本,我們留言內容中打入:<fontsize=10>你好! </font> 如果你的程序中沒有屏
蔽html語句,那麼就會改變"你好"字體的
大小。在留言本中改變字體大小和貼圖有時並不是什麼壞事,反而可以使留言本生動。但是如果在輸入框中寫個
javascript的死循環,比如:
<aherf="http://someurl"onMouseover="while(1){window.close('/')}">第一萬個驚心動魄</a>那麼其他查看該留言
的客人只要移
動鼠標到"第一萬個驚心動魄",上就會使用戶的瀏覽器因死循環而死掉。
1.1.2防範要點
(1)對特殊字符進行過濾
([/&;/`'///|"*?~<>^/(/)/[/]/{/}/$/n/r])///$1/g;),這個是最基本的,在很多地方也已經不只一次提到過
<scriptlanguage="vbscript">
subuBotton_onclick
ifform1.uUserName.value=""then
msgbox"您的姓名不能為空!",0+32,"哦!還不行"
form1.uUserName.focus
exitsub
endif
ifform1.uPassword.value=""then
msgbox"您的密碼不能為空!",0+32,"哦!還不行"
form1.uPassword.focus
exitsub
endif
ifform1.uUserName.value=""then
msgbox"您的姓名不能為空!",0+32,"哦!還不行"
form1.uUserName.focus
exitsub
endif
form1.submit
endsub
</script>
functionisEmpty(objname)
{
varstr=document.inputform[objname].value
vartmpstr=str.replace([/&;/`'///|"*?~<>^/(/)/[/]/{/}/$/n/r])///$1/g;,"")
vartmpstr=tmpstr.replace([/&;/`'///|"*?~<>^/(/)/[/]/{/}/$/n/r])///$1/g;,"")
return(tmpstr.length==0)
}
functioncheck()
{
tf=document.inputform
errors=""
if(isEmpty("username"))errors+="用戶名不能為空。/n";
if(isEmpty("password"))errors+="密碼不能為空!/n"
if(errors!="")
alert(errors);
return(errors=="")