XSS攻擊以及PHP預防

XSS又稱CSS,全稱Cross SiteScript(跨站腳本攻擊), XSS攻擊類似於SQL注入攻擊,是Web程序中常見的漏洞,XSS屬於被動式且用於客戶端的攻擊方式,所以容易被忽略其危害性。其原理是攻擊者向有XSS漏洞的網站中輸入(傳入)惡意的HTML代碼,當用戶瀏覽該網站時,這段HTML代碼會自動執行,從而達到攻擊的目的。如,盜取用戶Cookie信息、破壞頁面結構、重定向到其它網站等。
理論上,只要存在能提供輸入的表單並且沒做安全過濾或過濾不徹底,都有可能存在XSS漏洞。下面是一些最簡單並且比較常見的惡意字符XSS輸入:
1.XSS 輸入通常包含 JavaScript 腳本,如彈出惡意警告框:

2.XSS 輸入也可能是 HTML 代碼段,譬如:
(1).網頁不停地刷新
(2).嵌入其它網站的鏈接 < iframe src=http://xxxx width=250 height=250> 除了通過正常途徑輸入XSS攻擊字符外,還可以繞過JavaScript校驗,通過修改請求達到XSS攻擊的目的,如下圖:
這裏寫圖片描述

瞭解到XSS攻擊的原理和危害後,其實要預防也不難,下面提供一個簡單的PHP防止XSS攻擊的函數:

<?PHP
/**
 * @blog http://www.codetc.com
 * @param $string
 * @param $low 安全別級低
 */
function clean_xss(&$string, $low = False)
{
    if (! is_array ( $string ))
    {
        $string = trim ( $string );
        $string = strip_tags ( $string );
        $string = htmlspecialchars ( $string );
        if ($low)
        {
            return True;
        }
        $string = str_replace ( array ('"', "\\", "'", "/", "..", "../", "./", "//" ), '', $string );
        $no = '/%0[0-8bcef]/';
        $string = preg_replace ( $no, '', $string );
        $no = '/%1[0-9a-f]/';
        $string = preg_replace ( $no, '', $string );
        $no = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S';
        $string = preg_replace ( $no, '', $string );
        return True;
    }
    $keys = array_keys ( $string );
    foreach ( $keys as $key )
    {
        clean_xss ( $string [$key] );
    }
}

//just a test
$str = 'codetc.com<meta http-equiv="refresh" content="0;">';
clean_xss($str); //如果你把這個註釋掉,你就知道xss攻擊的厲害了
echo $str;
?>

還有,以下方法組織C端讀取cookie信息:

1.PHP 5.2以下支持

header("Set-Cookie: hidden=value; httpOnly");

2.PHP5.2以上支持

ini_set("session.cookie_httponly", 1);

3.兼容全部PHP版本
setcookie("name","hello", NULL, NULL, NULL, NULL, TRUE); 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章