XSS攻擊原理和防止

      XSS又稱CSS,全稱Cross SiteScript(跨站腳本攻擊),XSS攻擊類似於SQL注入攻擊,是Web程序中常見的漏洞,XSS屬於被動式且

用於客戶端的攻擊方式,所以容易被忽略器危害性。

        原理:攻擊者向XSS 漏洞的網站輸入(傳入)惡意的HTML代碼,當用戶瀏覽該網站時,這段HTML代碼會自動執行,從而達到攻擊的目的

。如:盜取用戶COOKIE信息、破壞頁面結果

 

常見的惡意字符XSS輸入:

1. XSS輸入常用包含JavaScript腳本,如彈出惡意警告框 <script>alert('xss');</script>

2. XSS輸入也可能是HTML代碼段,譬如:

   (1)網頁不停地刷新<meta http-equiv="refresh" content="0">

   (2) 嵌入其它網站的鏈接 <iframe src=http://xxxx width=250 height=250></iframe>

         構、重定向到其它網站等。

防止方法:

   (1)利用php htmlentities()函數 

   (2) php防止XSS跨站腳本攻擊的方法:是針對非法的HTML代碼包括單雙引號等,使用htmlspecialchars()函數。

             在使用htmlspecialchars()函數的時候注意第二個參數, 直接用htmlspecialchars($string)的話,第二個參數默認是ENT_COMPAT,函數默認只是轉化雙引號("),不對單引號(')做轉義。

所以,htmlspecialchars()函數更多的時候要加上第二個參數,應該這樣用: htmlspecialchars($string,ENT_QUOTES)。當然,如果需要不轉化如何的引號,用htmlspecialchars($string,ENT_NOQUOTES)。

另外,儘量少用htmlentities(), 在全部英文的時候htmlentities()和htmlspecialchars()沒有區別,都可以達到目的。但是,中文情況下, htmlentities()卻會轉化所有的html代碼,連同裏面的它無法識別的中文字符也給轉化了。

htmlentities()和htmlspecialchars()這兩個函數對單引號(')之類的字符串支持不好,都不能轉化, 所以用htmlentities()和htmlspecialchars()轉化的字符串只能防止XSS攻擊,不能防止SQL注入攻擊。

所有有打印的語句如echo,print等,在打印前都要使用htmlentities()進行過濾,這樣可以防止XSS,注意中文要寫出htmlentities($name,ENT_NOQUOTES,GB2312)。

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