Web安全之XSS漏洞
同源策略
同源策略(Same-Origin Policy),就是為了保證互聯(lián)網(wǎng)之中,各類資源的安全性而誕生的產(chǎn)物,它實(shí)際上是一個(gè)眾多瀏覽器廠商共同遵守的約定。同源策略是瀏覽器中最基本的安全功能。缺少同源策略,很多瀏覽器的常規(guī)功能都會(huì)受到影響,可以說(shuō)Web是構(gòu)建在同源策略基礎(chǔ)之上的。
如果Web世界沒(méi)有同源策略,當(dāng)你登錄FreeBuf賬號(hào)并打開(kāi)另一個(gè)站點(diǎn)時(shí),這個(gè)站點(diǎn)上的JavaScript可以跨域讀取你的FreeBuf賬號(hào)數(shù)據(jù),這樣的話整個(gè)WEB世界就沒(méi)有 隱私而言。
瀏覽器的同源策略,限制了不同源的“document”或是腳本,對(duì)當(dāng)前“document”或資源及其屬性的讀寫(xiě)權(quán)限。
同源策略是一種安全思想,但并不是統(tǒng)一的規(guī)范體系。不同語(yǔ)言腳本以及插件,它們的同源策略規(guī)則也不盡相同,不可一概而論。
javaScript中的同源,需要對(duì)比 兩者中的協(xié)議、域名、端口。三者完全相同才認(rèn)為是同源的,否則即是來(lái)自不同源的內(nèi)容。
在HTML語(yǔ)言中,有部分標(biāo)簽在引用第三方資源時(shí),不受同源策略的限制:
上述這種帶src屬性的標(biāo)簽,在加載時(shí),實(shí)際是生成一條GET請(qǐng)求,向指定服務(wù)器申請(qǐng)資源。
前言
跨站腳本攻擊(Cross Site Scripting)的縮寫(xiě),為了不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫(xiě)混淆,故將跨站腳本攻擊縮寫(xiě)為XSS。惡意攻擊者往Web頁(yè)面里插入惡意Script代碼,當(dāng)用戶瀏覽該頁(yè)之時(shí),嵌入其中Web里面的Script代碼會(huì)被執(zhí)行,從而達(dá)到惡意攻擊用戶的目的。
- 跨站: 從字面來(lái)分析,因?yàn)檫@個(gè)“跨”實(shí)際上是瀏覽器的特性,而不是缺陷,造成“跨”這樣的假象是因?yàn)榻^大多數(shù)XSS攻擊都會(huì)采用嵌入一段遠(yuǎn)程或者第三方域上的腳本資源。
- 腳本: 跨站腳本重點(diǎn)已經(jīng)不在“跨站”這個(gè)字母上,而是“腳本”。腳本主要是有兩個(gè):JavaScript和ActionScript。
XSS的原理
用戶提交的數(shù)據(jù)沒(méi)有過(guò)濾,或者過(guò)濾不嚴(yán)格,輸出到網(wǎng)頁(yè)中 ,導(dǎo)致可以構(gòu)造執(zhí)行JS代碼,或者修改網(wǎng)頁(yè)內(nèi)容。
XSS的危害
XSS沒(méi)有危害,很少有人去關(guān)注它。對(duì)于那些半年沒(méi)有更新的小企業(yè)網(wǎng)站來(lái)說(shuō),發(fā)生XSS漏洞幾乎沒(méi)有什么用。但是在各類的社交平臺(tái),郵件系統(tǒng),開(kāi)源流行的Web應(yīng)用,BBS,微博等場(chǎng)景中,造成的殺傷力卻十分強(qiáng)大。
XSS的危害
- 盜取用戶或者管理員的Cookie
- XSS Worm
- 掛馬(水坑攻擊)
- 有局限性的鍵盤記錄
…
XSS的分類
- 反射型XSS
- 存儲(chǔ)型XSS
- DOM XSS
- Flash XSS
反射型XSS
反射型XSS又稱為非持久型XSS。XSS代碼出現(xiàn)在URL參數(shù)或者請(qǐng)求中,瀏覽器發(fā)出請(qǐng)求時(shí),參數(shù)值作為輸入提交到服務(wù)器,服
務(wù)器接受處理后參數(shù)值出現(xiàn)在響應(yīng)的HTML中,最后瀏覽器解析執(zhí)行了這段XSS代碼。
反射型XSS利用過(guò)程
存儲(chǔ)型XSS
存儲(chǔ)型XSS,又稱持久型XSS,他和反射型XSS最大的不同就是,攻擊腳本將被永久地存放在目標(biāo)服務(wù)器的數(shù)據(jù)庫(kù)或文件中。
DOM XSS
DOM XSS與反射型XSS和存儲(chǔ)型XSS的差別是在于DOM XSS的代碼不需要服務(wù)器解析響應(yīng)的直接參與,觸發(fā)XSS靠的是瀏覽器DOM解析器的解析,可以完全認(rèn)為是客戶端的事情。
Flash XSS
利用的是網(wǎng)頁(yè)上flash文件缺陷來(lái)執(zhí)行js腳本,一般是反射型xss
XSS手動(dòng)挖掘
- 看URL參數(shù)輸出的位置
- 看輸入框輸出位置
輸出點(diǎn)位置
輸出在標(biāo)簽外
需要可以構(gòu)造標(biāo)簽,如果不能構(gòu)造標(biāo)簽就不存在XSS漏洞。
輸出到標(biāo)簽中
如果輸出在"雙引號(hào)或者’單引號(hào)內(nèi)部,需要能夠閉合引號(hào),如果不能閉合引號(hào),就需要看能否在當(dāng)前的標(biāo)簽屬性中執(zhí)行js代碼,如果不能,就不存在XSS漏洞。
如果沒(méi)有輸出在"雙引號(hào)或者’單引號(hào)內(nèi)部,或者可以閉合引號(hào),可以構(gòu)造一個(gè)新的屬性,使用新的屬性的值來(lái)執(zhí)行JS代碼,比如事件屬性。
輸出到Script標(biāo)簽中
- 如果輸出在"雙引號(hào)或者’單引號(hào)內(nèi)部,需要能夠閉合引號(hào),
- 如果不能閉合引號(hào),需要看當(dāng)前變量能不能innerHTML或者document.write,插入到網(wǎng)頁(yè)中,如果可以就可以構(gòu)造XSS,如果沒(méi)有,就不存在XSS(引號(hào)內(nèi)部可以使用unicode編碼, < 不能編碼)
- 如果輸出"雙引號(hào)或者’單引號(hào)內(nèi)部,需要能夠閉合引號(hào),如果可以閉合引號(hào),就可以直接傳遞進(jìn)去js代碼,使用注釋符號(hào),注釋掉后面的js代碼就可以構(gòu)造XSS
XSS防御
- 對(duì)XSS的防御需要根據(jù)實(shí)際情況對(duì)用戶的輸入進(jìn)行嚴(yán)格的過(guò)濾。基于過(guò)濾的XSS防御方式通常可分為兩種:基于黑名單的過(guò)濾和基于白名單的過(guò)濾。后者的防御效果往往更好,對(duì)于用戶在白名單之外的輸入,可以直接忽略。在構(gòu)造白名單的過(guò)程中需要保證在不影響用戶體驗(yàn)的同時(shí),盡可能杜絕一切不必要的輸入內(nèi)容。
- 在cookie中加入httponly屬性可以在一定程度上保護(hù)用戶的cookie,減少出現(xiàn)XSS時(shí)損失
- (1,apache2.2.x;2.注冊(cè)網(wǎng)站,把攻擊者自己的加了httponly的cookie復(fù)制過(guò)去,補(bǔ)全信息)
- Flash XSS的修復(fù)需要對(duì)相應(yīng)的flash進(jìn)行修改或升級(jí)替換。
總結(jié)
以上是生活随笔為你收集整理的Web安全之XSS漏洞的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 常见的上传绕过以及解析漏洞
- 下一篇: Web安全之文件包含漏洞