1、頁面標籤必須關閉,屬性值必須加引號。
在頁面中使用的標籤不關閉,屬性值不加引號往往成爲被攻擊點,攻擊者很容易的利用這些漏洞進行注入。避免這些漏洞的出現可以提高被攻擊的可能。
2、Form提交方式必須選用POST。
Form默認的提交方式是Get,這種方式將表單中數據的按照variable=value的形式,使用“?”添加至Action所指向的URL後面,各個變量之間使用“&”連接。所要傳遞的信息量除受URL長度限制之外,信息內容都顯示暴露。
在使用Form的時候必須將提交方式置爲POST。示例:
<form action="…" method="post" target="_blank">…</form>
3、所有的非ASCII字符在URL中傳遞時都需要按照協商好的編碼方式做URL編碼。
推薦使用encodeURI、encodeURIComponent或者自定義encode實現。encodeURI、encodeURIComponent默認都返回UTF8編碼的URL,區別在於encodeURI方法不會對下列字符進行編碼: ":"、"/"、";" 和 "?"。而encodeURIComponent則會對這些字符進行編碼處理。
4、儘量使用對象的innerText,不要使用innerHtml屬性。
對象的innerText屬性默認會對輸入的數據進行encode,使得如果數據的數據還有html可執行標記時不會直接執行,而如果使用innerHtml屬性的話不會保障。
<SPAN id=”Addr”></SPAN>
<Script>
// Using innerText renders the content safe.Addr.innerText=”…”;
//Using innerHtml requires the use of HtmlEncode to make it safe.Addr.innerHtml=””;
</Script>
5、輸入框設置最大長度、輸入數據類型限制。
輸入框一般是攻擊者比較鐘意的攻擊對象,攻擊者可以通過輸入框限制不足的弱點進行數據竊取(比如SQL注入)、或者製造迫害(如比XSS)。我們可以通過對輸入框最大長度、輸入數據類型的限制,從一定程度上防範這樣的攻擊。我們可以根據實際需求,對一些輸入框限定只允許輸入字母、數字等。同時對輸入的數據長度做限制。
6、關閉客戶端自動完成功能,減少駐留在客戶端數據。
<FORM … AUTOCOMPLETE=”OFF”/>
<INPUT … AUTOCOMPLETE=”OFF”/>
7、設置<Frame>/<iFrame>受限,防止腳本執行。
將<Frame>/<iFrame>中security屬性設置爲restricted後, Frame中的腳本將不能執行(僅限於IE)。