概念:
XSS(Cross Site Script)跨站腳本攻擊。它指的是惡意攻擊者往Web 頁面里插入惡意html代碼,當(dāng)用戶瀏覽該頁之時,嵌入其中Web 里面的html 代碼會被執(zhí)行,從而達(dá)到惡意用戶的特殊目的。本文介紹了該攻擊方式,并給出了一些防范措施。
原理:
XSS 屬于被動式的攻擊。攻擊者先構(gòu)造一個跨站頁面,利用script、<IMG>、<IFRAME>等各種方式使得用戶瀏覽這個頁面時,觸發(fā)對被攻擊站點的http 請求。此時,如果被攻擊者如果已經(jīng)在被攻擊站點登錄,就會持有該站點cookie。這樣該站點會認(rèn)為被攻擊者發(fā)起了一個http 請求。而實際上這個請求是在被攻擊者不知情的情況下發(fā)起的,由此攻擊者在一定程度上達(dá)到了冒充被攻擊者的目的。精心的構(gòu)造這個攻擊請求,可以達(dá)到冒充發(fā)文,奪取權(quán)限等等多個攻擊目的。在常見的攻擊實例中,這個請求是通過script 來發(fā)起的,因此被稱為Cross Site Script。攻擊Yahoo Mail 的Yamanner 蠕蟲是一個著名的XSS 攻擊實例。Yahoo Mail 系統(tǒng)有一個漏洞,當(dāng)用戶在web 上察看信件時,有可能執(zhí)行到信件內(nèi)的javascript 代碼。病毒可以利用這個漏洞使被攻擊用戶運行病毒的script。同時Yahoo Mail 系統(tǒng)使用了Ajax技術(shù),這樣病毒的script可以很容易的向Yahoo Mail 系統(tǒng)發(fā)起ajax 請求,從而得到用戶的地址簿,并發(fā)送病毒給他人。
XSS 攻擊主要分為兩類:
一類是來自內(nèi)部的攻擊,主要指的是利用WEB 程序自身的漏洞,提交特殊的字符串,從而使得跨站頁面直接存在于被攻擊站點上,這個字符串被稱為跨站語句。這一類攻擊所利用的漏洞非常類似于SQL Injection 漏洞,都是WEB程序沒有對用戶輸入作充分的檢查和過濾。上文的Yamanner就是一例。
另一類則是來來自外部的攻擊,主要指的自己構(gòu)造XSS 跨站漏洞網(wǎng)頁或者尋找非目標(biāo)機以外的有跨站漏洞的網(wǎng)頁。如當(dāng)我們要滲透一個站點,我們自己構(gòu)造一個跨站網(wǎng)頁放在自己的服務(wù)器上,然后通過結(jié)合其它技術(shù),如社會工程學(xué)等,欺騙目標(biāo)服務(wù)器的管理員打開。這一類攻擊的威脅相對較低,至少ajax 要發(fā)起跨站調(diào)用是非常困難的。
先總結(jié)一下常見的攻擊手法:
1. 依賴跨站漏洞,需要在被攻擊網(wǎng)站的頁面種入腳本的手法
1.1. Cookie 盜取,通過javascript 獲取被攻擊網(wǎng)站種下的cookie,并發(fā)送給攻擊者。
1.1.1. 從cookie 中提取密碼等隱私
1.1.2. 利用cookie 偽造session,發(fā)起重放攻擊
1.2. Ajax 信息盜取,通過javascript 發(fā)起ajax 請求。
1.2.1. 從ajex 結(jié)果中獲取隱私。
1.2.2. 模擬用戶完成多頁表單。
2. 不依賴跨站漏洞的手法,搜狐公司研發(fā)中心版權(quán)所有,僅供技術(shù)交流,轉(zhuǎn)載請保留上述文字
2.1. 單向HTTP 動作,通過img.src 等方法發(fā)起跨站訪問,冒充被攻擊者執(zhí)行特權(quán)操作。但是很難拿到服務(wù)器的返回值。
2.2. 雙向HTTP 動作,如果服務(wù)器產(chǎn)生一段動態(tài)的script,那么可以用script.src 的方法發(fā)起跨站訪問并拿到服務(wù)器的返回值。
防范手法如下:
1. 防堵跨站漏洞,阻止攻擊者利用在被攻擊網(wǎng)站上發(fā)布跨站攻擊語句不可以信任用戶提交的任何內(nèi)容,首先代碼里對用戶輸入的地方和變量都需要仔細(xì)檢查長度和對”<”,”>”,”;”,”’”等字符做過濾;其次任何內(nèi)容寫到頁面之前都必須加以encode,避免不小心把html tag 弄出來。這一個層面做好,至少可以堵住超過一半的XSS 攻擊。
2. Cookie 防盜
首先,避免直接在cookie 中泄露用戶隱私,例如email、密碼等等。
其次,通過使cookie 和系統(tǒng)ip 綁定來降低cookie 泄露后的危險。這樣攻擊者得到的cookie 沒有實際價值,不可能拿來重放。
3. 盡量采用POST 而非GET 提交表單
POST 操作不可能繞開javascript 的使用,這會給攻擊者增加難度,減少可利用的跨站漏洞。
4. 嚴(yán)格檢查refer
檢查http refer 是否來自預(yù)料中的url。這可以阻止第2 類攻擊手法發(fā)起的http 請求,也能防止大部分第1 類攻擊手法,除非正好在特權(quán)操作的引用頁上種了跨站訪問。
5. 將單步流程改為多步,在多步流程中引入效驗碼
多步流程中每一步都產(chǎn)生一個驗證碼作為hidden 表單元素嵌在中間頁面,下一步操
作時這個驗證碼被提交到服務(wù)器,服務(wù)器檢查這個驗證碼是否匹配。首先這為第1 類攻擊者大大增加了麻煩。其次攻擊者必須在多步流程中拿到上一步產(chǎn)生的效驗碼才有可能發(fā)起下一步請求,這在第2 類攻擊中是幾乎無法做到的。
6. 引入用戶交互簡單的一個看圖識數(shù)可以堵住幾乎所有的非預(yù)期特權(quán)操作。
7. 只在允許anonymous 訪問的地方使用動態(tài)的javascript。
8. 對于用戶提交信息的中的img 等link,檢查是否有重定向回本站、不是真的圖片等可疑操作。
9. 內(nèi)部管理網(wǎng)站的問題很多時候,內(nèi)部管理網(wǎng)站往往疏于關(guān)注安全問題,只是簡單的限制訪問來源。這種網(wǎng)站往往對XSS
攻擊毫無抵抗力,需要多加注意。
安全問題需要長期的關(guān)注,從來不是一錘子買賣。XSS 攻擊相對其他攻擊手段更加隱蔽和多變,和業(yè)務(wù)流程、代碼實現(xiàn)都有關(guān)系,不存在什么一勞永逸的解決方案。此外,面對XSS,往往要犧牲產(chǎn)品的便利性才能保證完全的安全,如何在安全和便利之間平衡也是一件需要考慮的事情。
聯(lián)系客服