一.什么是xss攻擊
跨站腳本攻擊(XSS),英文全稱 Cross Site Script
XSS攻擊,一般是指黑客通過在網頁中注入惡意腳本,當用戶瀏覽網頁時,惡意腳本執行,控制用戶瀏覽器行為的一種攻擊方式
XSS攻擊分為三種,反射型XSS、存儲型XSS、DOM Based XSS.
了解什么是xss攻擊,例子:
本地服務器demo目錄下有個index.php,通過提交信息顯示在頁面上顯示數據。
正常情況下:http:localhost/demo/index.php?name=張三,
網頁上就會顯示張三出來,這個信息是用戶在瀏覽器的url中輸入的,可以正常顯示在頁面上,但是如果在頁面中插入一段javascript代碼,頁面就無法正常顯示了,
例:http:localhost/demo/index.php?name=<script>window.open(http://www.fanyi.com)</script>,
例子雖然簡單但是提現xss攻擊的完整流程。
1.反射性XSS
也被稱為非持久性XSS,這種攻擊方式把XSS的Payload寫在URL中,通過瀏覽器直接“反射”給用戶。用戶將一段含有惡意代碼的請求提交給 Web 服務器,Web 服務器接收到請求時,又將惡意代碼反射給了瀏覽器端,這種攻擊方式通常需要誘使用戶點擊某個惡意鏈接,才能攻擊成功。
2.存儲型XSS
又被稱為持久性XSS,會把黑客輸入的惡意腳本存儲在服務器的數據庫中。當其他用戶瀏覽頁面包含這個惡意腳本的頁面,用戶將會受到黑客的攻擊。一個常見的場景就是黑客寫下一篇包含惡意JavaScript腳本的博客文章,當其他用戶瀏覽這篇文章時,惡意的JavaScript代碼將會執行
3.DOM Based XSS
基於 DOM 的 XSS 攻擊是不牽涉到頁面 Web 服務器的,其實就是利用后端代碼的漏洞。它的特點是在 Web 資源傳輸過程或者在用戶使用頁面的過程中修改 Web 頁面的數據.
XSS攻擊的危害
我們把進行XSS攻擊的惡意腳本成為XSS Payload。XSS Payload的本質是JavaScript腳本,所以JavaScript可以做什么,XSS攻擊就可以做什么。
一個最常見的XSS Payload就是盜取用戶的Cookie,從而發起Cookie劫持攻擊。Cookie中,一般會保存當前用戶的登錄憑證,如果Cookie被黑客盜取,以為着黑客有可能通過Cookie直接登進用戶的賬戶,進行惡意操作。
防御
其實如今一些流行的瀏覽器都內置了一些對抗XSS的措施,比如Firefox的CSP、IE 8內置的XSS Filter等。
- 將cookie等敏感信息設置為httponly,禁止Javascript通過
document.cookie
獲得 - 對所有的輸入做嚴格的校驗尤其是在服務器端,過濾掉任何不合法的輸入,比如手機號必須是數字,通常可以采用正則表達式.
- 凈化和過濾掉不必要的html標簽,比如:
<iframe>, alt,<script>
;凈化和過濾掉不必要的Javascript的事件標簽,比如:onclick, onfocus
等 - 轉義單引號,雙引號,尖括號等特殊字符,可以采用htmlencode編碼 或者過濾掉這些特殊字符
HttpOnly
HttpOnly最早是由微軟提出,並在IE6中實現的,至今已逐漸成為一個標准。瀏覽器將禁止頁面的JavaScript訪問帶有HttpOnly 屬性的Cookie。以下瀏覽器開始支持HttpOnly:
- Microsoft IE 6 SP1+
- Mozilla FireFox 2.0.0.5+
- Mozilla Firefox 3.0.0.6+
- Google Chrome
- Apple Safari 4.0+
- Opera 9.5+ 一個Cookie的使用過程如下:
Step1: 瀏覽器向服務器發送請求,這時候沒有cookie。
Step2: 服務器返回同時,發送Set-Cookie頭,向客戶端瀏覽器寫入Cookie。
Step3: 在該Cookie到期前,瀏覽器訪問該域名下所有的頁面,都將發送該Cookie。而HttpOnly是在Set-Cookie時標記的。