在Web安全的領(lǐng)域中,XSS攻擊是最常見的一種攻擊方式万栅。小編整理出了XSS的基礎(chǔ)知識佑钾,包括了XSS的簡介、原理與類型來幫助大家梳理出XSS的基礎(chǔ)知識點(diǎn)烦粒,快來看看吧休溶。
一代赁、XSS攻擊簡介
XSS全稱是Cross Site Scripting即跨站腳本,當(dāng)目標(biāo)網(wǎng)站目標(biāo)用戶瀏覽器渲染HTML文檔的過程中兽掰,出現(xiàn)了不被預(yù)期的腳本指令并執(zhí)行時(shí)芭碍,XSS就發(fā)生了。
作為一種HTML注入攻擊孽尽,XSS攻擊的核心思想就是在HTML頁面中注入惡意代碼窖壕,而XSS采用的注入方式是非常巧妙的。在XSS攻擊中杉女,一般有三個(gè)角色參與:攻擊者艇拍、目標(biāo)服務(wù)器、受害者的瀏覽器宠纯。
由于有的服務(wù)器并沒有對用戶的輸入進(jìn)行安全方面的驗(yàn)證,攻擊者就可以很容易地通過正常的輸入手段层释,夾帶進(jìn)一些惡意的HTML腳本代碼婆瓜。當(dāng)受害者的瀏覽器訪 問目標(biāo)服務(wù)器上被注入惡意腳本的頁面后,由于它對目標(biāo)服務(wù)器的信任贡羔,這段惡意腳本的執(zhí)行不會(huì)受到什么阻礙廉白。而此時(shí),攻擊者的目的就已經(jīng)達(dá)到了乖寒。
下面我們以一段簡單的JavaScript腳本為例猴蹂,來描述整個(gè)XSS攻擊的過程:
?????????<script>alert(document.cookie);</script>
上面這段腳本的執(zhí)行具體內(nèi)容就是彈出一個(gè)對話框顯示用戶的Cookie信息。攻擊者在向目標(biāo)服務(wù)器的某個(gè)頁面進(jìn)行數(shù)據(jù)輸入的過程中楣嘁,通過正常的輸入方式夾帶進(jìn)這段腳本磅轻。假如一切正常的時(shí)候,生成的頁面代碼如下形式:
?????????<html>
?????????…
text ??????????//正常輸入的數(shù)據(jù)
?????????…
?????????</html>
如果用戶的輸入為textalert(document.cookie);逐虚,而目標(biāo)服務(wù)器又沒有對這個(gè)輸入進(jìn)行檢驗(yàn)的話聋溜,則會(huì)生成如下形式的頁面代碼:
?????????<html>
?????????…
?????????text
?????????<script>alert(document.cookie);</script>
?????????…
?????????</html>
可以看到,這段腳本已經(jīng)成功嵌入到該頁面當(dāng)中叭爱。當(dāng)受害瀏覽器訪問這個(gè)頁面的時(shí)候撮躁,這段腳本也將被認(rèn)為是頁面的一部分,從而得到執(zhí)行买雾,即彈出對話框顯示受害瀏覽器的Cookie信息把曼。
二、XSS原理
XSS的原理是惡意攻擊者往 Web 頁面里插入惡意可執(zhí)行網(wǎng)頁腳本代碼漓穿,當(dāng)用戶瀏覽該頁之時(shí)嗤军,嵌入其中 Web 里面的腳本代碼會(huì)被執(zhí)行,從而可以達(dá)到攻擊者盜取用戶信息或其他侵犯用戶安全隱私的目的器净。
三型雳、XSS攻擊類型
根據(jù)XSS腳本注入方式的不同,我們可以將XSS攻擊簡單的分類為反射型XSS、存儲(chǔ)型XSS纠俭、DOM-based 型沿量、基于字符集的XSS、基于 Flash 的跨站 XSS冤荆、未經(jīng)驗(yàn)證的跳轉(zhuǎn) XSS6種類型朴则。
1、反射型XSS(非持久型XSS)
又稱非持久型XSS钓简。之所以稱為反射型XSS乌妒,是因?yàn)檫@種攻擊方式的注入代碼是從目標(biāo)服務(wù)器通過錯(cuò)誤信息、搜索結(jié)果等等方式“反射”回來的:發(fā)出請求時(shí)外邓,XSS代碼出現(xiàn)在URL中撤蚊,作為輸入提交到服務(wù)器端,服務(wù)器端解析后響應(yīng)损话,XSS代碼隨響應(yīng)內(nèi)容一起傳回給瀏覽器侦啸,最后瀏覽器解析執(zhí)行XSS代碼。這個(gè)過程像一次反射丧枪,故叫反射型XSS光涂。??而稱為非持久型XSS,則是因?yàn)檫@種攻擊方式具有一次性拧烦,由于代碼注入的是一個(gè)動(dòng)態(tài)產(chǎn)生的頁面而不是永久的頁面忘闻,因此這種攻擊方式只在點(diǎn)擊鏈接的時(shí)候才產(chǎn)生作用。
攻擊者通過電子郵件等方式給別人發(fā)送帶有惡意腳本代碼參數(shù)的URL恋博,當(dāng) URL 地址被打開時(shí)齐佳,注入腳本被傳輸?shù)侥繕?biāo)服務(wù)器上,然后服務(wù)器將注入腳本“反射”到受害者的瀏覽器上债沮,特有的惡意代碼參數(shù)被 HTML 解析重虑、執(zhí)行。
非持久型XSS漏洞攻擊的四大特點(diǎn):①即時(shí)性秦士。不經(jīng)過服務(wù)器存儲(chǔ)缺厉,直接通過 HTTP 的 GET 和 POST 請求就能完成一次攻擊,拿到用戶隱私數(shù)據(jù)隧土;②攻擊者需要誘騙點(diǎn)擊提针;③反饋率低,所以較難發(fā)現(xiàn)和響應(yīng)修復(fù)曹傀;④盜取用戶敏感保密信息辐脖。
防止出現(xiàn)非持久型XSS漏洞的五大措施:①Web頁面渲染的所有內(nèi)容或者渲染的數(shù)據(jù)都必須來自于服務(wù)端;②盡量不要從URL皆愉,document.referrer嗜价,document.forms 等這種 DOM API 中獲取數(shù)據(jù)直接渲染艇抠;③盡量不要使用eval, new Function(),document.write()久锥,document.writeln()家淤,window.setInterval(),window.setTimeout()瑟由,innerHTML絮重,document.creteElement() 等可執(zhí)行字符串的方法;④如果做不到以上幾點(diǎn)歹苦,也必須對涉及DOM渲染的方法傳入的字符串參數(shù)做 escape 轉(zhuǎn)義青伤;⑤前端渲染的時(shí)候?qū)θ魏蔚淖侄味夹枰鰁scape轉(zhuǎn)義編碼。
2殴瘦、存儲(chǔ)型XSS(持久型XSS)
存儲(chǔ)型XSS狠角,又稱持久型XSS,他和反射型XSS最大的不同就是蚪腋,攻擊腳本將被永久地存放在目標(biāo)服務(wù)器端(數(shù)據(jù)庫擎厢,內(nèi)存,文件系統(tǒng)等)辣吃,下次請求目標(biāo)頁面時(shí)不用再提交XSS代碼。
一般存在于Form表單提交等交互功能芬探,如發(fā)帖留言神得,提交文本信息等,黑客利用的 XSS 漏洞偷仿,將內(nèi)容經(jīng)正常功能提交進(jìn)入數(shù)據(jù)庫持久保存哩簿,當(dāng)前端頁面獲得后端從數(shù)據(jù)庫中讀出的注入代碼時(shí),恰好將其渲染執(zhí)行酝静。
這種攻擊多見于論壇节榜,攻擊者在發(fā)帖的過程中,將惡意腳本連同正常信息一起注入到帖子的內(nèi)容之中别智。隨著帖子被論壇服務(wù)器存儲(chǔ)下來宗苍,惡意腳本也永久地被存放在論壇服務(wù)器的后端存儲(chǔ)器中。當(dāng)其它用戶瀏覽這個(gè)被注入了惡意腳本的帖子的時(shí)候薄榛,惡意腳本則會(huì)在他們的瀏覽器中得到執(zhí)行讳窟,從而受到了攻擊。
可以看到敞恋,存儲(chǔ)型XSS的攻擊方式能夠?qū)阂獯a永久地嵌入一個(gè)頁面當(dāng)中丽啡,所有訪問這個(gè)頁面的用戶都將成為受害者。如果我們能夠謹(jǐn)慎對待不明鏈接硬猫,那么反射型的XSS攻擊將沒有多大作為补箍,而存儲(chǔ)型XSS則不同改执,由于它注入的往往是一些我們所信任的頁面,因此無論我們多么小心坑雅,都難免會(huì)受到攻擊辈挂。可以說霞丧,存儲(chǔ)型XSS更具有隱蔽性呢岗,帶來的危害也更大,除非服務(wù)器能完全阻止注入蛹尝,否則任何人都很有可能受到攻擊后豫。
持久型XSS的三大特點(diǎn):①持久性,植入在數(shù)據(jù)庫中突那;②危害面廣挫酿,甚至可以讓用戶機(jī)器變成DDoS攻擊的肉雞;③盜取用戶敏感私密信息愕难。
防止持久型XSS漏洞的三大措施:?①后端在入庫前應(yīng)該選擇不相信任何前端數(shù)據(jù)早龟,將所有的字段統(tǒng)一進(jìn)行轉(zhuǎn)義處理;②后端在輸出給前端數(shù)據(jù)統(tǒng)一進(jìn)行轉(zhuǎn)義處理猫缭;③前端在渲染頁面DOM的時(shí)候應(yīng)該選擇不相信任何后端數(shù)據(jù)葱弟,任何字段都需要做轉(zhuǎn)義處理。
3猜丹、DOM-based型
客戶端的腳本程序可以動(dòng)態(tài)地檢查和修改頁面內(nèi)容芝加,而不依賴于服務(wù)器端的數(shù)據(jù)。例如客戶端如從URL中提取數(shù)據(jù)并在本地執(zhí)行射窒,如果用戶在客戶端輸入的數(shù)據(jù)包含了惡意的 JavaScript 腳本藏杖,而這些腳本沒有經(jīng)過適當(dāng)?shù)倪^濾和消毒,那么應(yīng)用程序就可能受到 DOM-based XSS 攻擊脉顿。需要特別注意以下的用戶輸入源 document.URL蝌麸、 location.hash、 location.search艾疟、 document.referrer 等来吩。
4、基于字符集的XSS
???????哪怕現(xiàn)在很多的瀏覽器以及各種開源的庫都專門針對了XSS進(jìn)行轉(zhuǎn)義處理蔽莱,盡量默認(rèn)抵御絕大多數(shù) XSS 攻擊误褪,但是還是有很多方式可以繞過轉(zhuǎn)義規(guī)則,讓人防不勝防碾褂。比如「基于字符集的 XSS 攻擊」就是繞過這些轉(zhuǎn)義處理的一種攻擊方式兽间,比如有些 Web 頁面字符集不固定,用戶輸入非期望字符集的字符正塌,有時(shí)會(huì)繞過轉(zhuǎn)義過濾規(guī)則嘀略。
可以形成「基于字符集的XSS攻擊」的原因是由于瀏覽器在 meta 沒有指定 charset 的時(shí)候有自動(dòng)識別編碼的機(jī)制恤溶,所以這類攻擊通常就是發(fā)生在沒有指定或者沒來得及指定 meta 標(biāo)簽的 charset 的情況下。
避免基于字符集的XSS攻擊的兩大方法:①記住指定帜羊;②XML中不僅要指定字符集為 utf-8咒程,而且標(biāo)簽要閉合。
5讼育、基于 Flash 的跨站 XSS
基于Flash的跨站 XSS 也是屬于反射型 XSS 的一種帐姻,AS 腳本可以接受用戶輸入并操作 cookie,攻擊者可以配合其他 XSS(持久型或者非持久型)方法將惡意 swf 文件嵌入頁面中奶段。主要是因?yàn)?AS 有時(shí)候需要和 JS 傳參交互饥瓷,攻擊者會(huì)通過惡意的 XSS 注入篡改參數(shù),竊取并操作cookie痹籍。
基于Flash的跨站 XSS 的兩種避免方法:①嚴(yán)格管理cookie的讀寫權(quán)限呢铆;②對Flash能接受用戶輸入的參數(shù)進(jìn)行過濾 escape 轉(zhuǎn)義處理。
6蹲缠、未經(jīng)驗(yàn)證的跳轉(zhuǎn)XSS
有一些場景是后端需要對一個(gè)傳進(jìn)來的待跳轉(zhuǎn)的URL參數(shù)進(jìn)行一個(gè) 302 跳轉(zhuǎn)棺克,可能其中會(huì)帶有一些用戶的敏感(cookie)信息。如果服務(wù)器端做302 跳轉(zhuǎn)线定,跳轉(zhuǎn)的地址來自用戶的輸入娜谊,攻擊者可以輸入一個(gè)惡意的跳轉(zhuǎn)地址來執(zhí)行腳本。
防止未經(jīng)驗(yàn)證的跳轉(zhuǎn)XSS漏洞的兩種措施:①對待跳轉(zhuǎn)的URL參數(shù)做白名單或者某種規(guī)則過濾斤讥;②后端注意對敏感信息的保護(hù),比如 cookie 使用來源驗(yàn)證纱皆。
以上就是小編整理出來的XSS基礎(chǔ)知識的全部內(nèi)容啦,相信大家看完以后對XSS攻擊也有了一定的了解周偎。