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>
構、重定向到其它網站等。
方法:利用php htmlentities()函式
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)。