一、XSS漏洞原理
XSS,即跨站腳本攻擊,是指攻擊者利用Web服務(wù)器中的應(yīng)用程序或代碼漏洞,在頁面中嵌入客戶端腳本(通常是一段由JavaScript編寫的惡意代碼,少數(shù)情況下還有ActionScript、VBScript等語言),當(dāng)信任此Web服務(wù)器的用戶訪問Web站點(diǎn)中含有惡意腳本代碼的頁面或打開收到的URL鏈接時(shí),用戶瀏覽器會(huì)自動(dòng)加載并執(zhí)行該惡意代碼,從而達(dá)到攻擊的目的。
當(dāng)應(yīng)用程序沒有對(duì)用戶提交的內(nèi)容進(jìn)行驗(yàn)證和重新編碼,而是直接呈現(xiàn)給網(wǎng)站的訪問者時(shí),就可能會(huì)觸發(fā)XSS攻擊。
二、XSS漏洞的危害
(1)竊取管理員帳號(hào)或Cookie。入侵者可以冒充管理員的身份登錄后臺(tái),使得入侵者具有惡意操縱后臺(tái)數(shù)據(jù)的能力,包括讀取、更改、添加、刪除一些信息。
(2)竊取用戶的個(gè)人信息或者登錄帳號(hào),對(duì)網(wǎng)站的用戶安全產(chǎn)生巨大的威脅。例如冒充用戶身份進(jìn)行各種操作。
(3)網(wǎng)站掛馬。先將惡意攻擊代碼嵌入到Web應(yīng)用程序之中。當(dāng)用戶瀏覽該掛馬頁面時(shí),用戶的計(jì)算機(jī)會(huì)被植入木馬。
(4)發(fā)送廣告或者垃圾信息。攻擊者可以利用XSS漏洞植入廣告,或者發(fā)送垃圾信息,嚴(yán)重影響到用戶的正常使用。
三、XSS漏洞的分類
1、反射型XSS
反射型XSS,也稱為非持久性XSS,是最常見的一種XSS。
XSS代碼常常出現(xiàn)在URL請(qǐng)求中,當(dāng)用戶訪問帶有XSS代碼的URL請(qǐng)求時(shí),服務(wù)器端接收請(qǐng)求并處理,然后將帶有XSS代碼的數(shù)據(jù)返回給瀏覽器,瀏覽器解析該段帶有XSS代碼的數(shù)據(jù)并執(zhí)行,整個(gè)過程就像一次反射,故稱為反射型XSS。
該類攻擊的主要特點(diǎn)是它的及時(shí)性和一次性,即用戶提交請(qǐng)求后,響應(yīng)信息會(huì)立即反饋給用戶。該類攻擊常發(fā)生在搜索引擎、錯(cuò)誤提示頁面等對(duì)用戶的輸入做出直接反應(yīng)的場景中。
2、存儲(chǔ)型XSS
存儲(chǔ)型XSS,也稱為持久性XSS。
在存儲(chǔ)型XSS中,XSS代碼被存儲(chǔ)到服務(wù)器端,因此允許用戶存儲(chǔ)數(shù)據(jù)到服務(wù)器端的Web應(yīng)用程序可能存在該類型XSS漏洞。攻擊者提交一段XSS代碼后,服務(wù)器接收并存儲(chǔ),當(dāng)其他用戶訪問包含該XSS代碼的頁面時(shí),XSS代碼被瀏覽器解析并執(zhí)行。
存儲(chǔ)型XSS攻擊的特點(diǎn)之一是提交的惡意內(nèi)容會(huì)被永久存儲(chǔ),因而一個(gè)多帶帶的惡意代碼就會(huì)使多個(gè)用戶受害,故被稱為持久性XSS,它也是跨站腳本攻擊中危害最的一類。二是被存儲(chǔ)的用戶提交的惡意內(nèi)容不一定被頁面使用,因此存在危險(xiǎn)的響應(yīng)信息不一定被立即返回,也許在訪問那些在時(shí)間上和空間上沒有直接關(guān)聯(lián)的頁面時(shí)才會(huì)引發(fā)攻擊,因此存在不確定性和更好的隱蔽性。
這類攻擊的一個(gè)典型場景是留言板、博客和論壇等,當(dāng)惡意用戶在某論壇頁面發(fā)布含有惡意的Javascript代碼的留言時(shí),論壇會(huì)將該用戶的留言內(nèi)容保存在數(shù)據(jù)庫或文件中并作為頁面內(nèi)容的一部分顯示出來。當(dāng)其他用戶查看該惡意用戶的留言時(shí),惡意用戶提交的惡意代碼就會(huì)在用戶瀏覽器中解析并執(zhí)行。
3、DOM型XSS
DOM (Document Objet Model)指文檔對(duì)象模型。
DOM常用來表示在HTML和XML中的對(duì)象。DOM可以允許程序動(dòng)態(tài)的訪問和更新文檔的內(nèi)容、結(jié)構(gòu)等??蛻舳薐avaScript可以訪問瀏覽器的文檔對(duì)象模型。也就是說,通過JavaScript代碼控制DOM節(jié)點(diǎn)就可以不經(jīng)過服務(wù)器端的參與重構(gòu)HTML頁面。
該類攻擊是反射型XSS的變種。它通常是由于客戶端接收到的腳本代碼存在邏輯錯(cuò)誤或者使用不當(dāng)導(dǎo)致的。比如Javascript代碼不正確地使用各種DOM方法(如document.write)和Javascript內(nèi)部函數(shù)(如eval函數(shù)),動(dòng)態(tài)拼接HTML代碼和腳本代碼就容易引發(fā)DOM型的跨站腳本攻擊。
因此,DOM型XSS與前面兩種XSS的區(qū)別就在于DOM型XSS攻擊的代碼不需要與服務(wù)器端進(jìn)行交互,DOM型XSS的觸發(fā)基于瀏覽器端對(duì)DOM數(shù)據(jù)的解析來完成,也就是完全是客戶端的事情。
4、判斷是哪一種XSS
發(fā)送一次帶XSS代碼的請(qǐng)求,若只能在當(dāng)前返回的數(shù)據(jù)包里發(fā)現(xiàn)XSS代碼,則是反射型;若以后這個(gè)頁面的返回包里都會(huì)有XSS代碼,則是存儲(chǔ)型;若在返回包里找不到XSS代碼,則是DOM型。
四、XSS漏洞的檢測與防御
1、檢測
手工檢測
手工檢測重點(diǎn)要考慮數(shù)據(jù)輸入的地方,且需要清楚輸入的數(shù)據(jù)輸出到什么地方。
在檢測的開始,可以輸入一些敏感字符,比如“<、>、()”等,提交后查看網(wǎng)頁源代碼的變化以發(fā)現(xiàn)輸入被輸出到什么地方,且可以發(fā)現(xiàn)相關(guān)敏感字符是否被過濾。
手工檢測結(jié)果相對(duì)準(zhǔn)確,但效率較低。
工具檢測
常用工具有AVWS(Acunetix Web Vulnerability Scanner)、BurpSuite等。還有一些專門針對(duì)XSS漏洞的檢測工具,如:XSSer、XSSF(跨站腳本攻擊框架)、BeEF(The Browser Exploitation Framework)等。
2、防御
●使用黑名單進(jìn)行
●對(duì)HTML標(biāo)簽或特殊字符進(jìn)行過濾
●使用內(nèi)容安全的CSP
●使用設(shè)計(jì)上就會(huì)自動(dòng)編碼的框架,如:OWASP ESAPI、React JS、JSOUP等,對(duì)于JAVA而言,可以使用ESAPI.encoder().encodeForHTML()對(duì)字符串進(jìn)行HTML編碼。
●對(duì)于反射型和存儲(chǔ)型XSS,可以在數(shù)據(jù)返回給客戶端瀏覽器時(shí),將敏感字符進(jìn)行轉(zhuǎn)義,如:將單引號(hào)進(jìn)行編碼替換(十進(jìn)制編碼'、十六進(jìn)制編碼'、HTML編碼&apos、Unicode編碼\u0027等)。
●對(duì)于DOM型XSS,可以使用上下文敏感數(shù)據(jù)編碼。如:在PHP中的htmlspecialchars()、htmlentities()函 數(shù)可以將一些預(yù)定義的字符轉(zhuǎn)換為HTML實(shí)體,如:小于轉(zhuǎn)化為<、大于轉(zhuǎn)化為>、雙引號(hào)轉(zhuǎn)化為"、單引號(hào)轉(zhuǎn)化為&apos、與轉(zhuǎn)化 為&等。
●啟用瀏覽器的HttpOnly特性可以組織客戶端腳本訪問cookie。如:在PHP中可以通過下面的代碼設(shè)置cookie并啟用HttpOnly。
<pre>`"<script>window.location = "http://www.baidu.com/"</script>"
</pre>
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/128406.html
摘要:分析及預(yù)防,又稱跨站腳本,的重點(diǎn)不在于跨站點(diǎn),而是在于腳本的執(zhí)行。在這里需要強(qiáng)調(diào)一點(diǎn)的是,默認(rèn)會(huì)禁止代碼塊的執(zhí)行禁止內(nèi)聯(lián)事件處理函數(shù)禁止內(nèi)聯(lián)樣式禁止和。 XSS分析及預(yù)防 XSS(Cross Site Scripting),又稱跨站腳本,XSS的重點(diǎn)不在于跨站點(diǎn),而是在于腳本的執(zhí)行。在WEB前端應(yīng)用日益發(fā)展的今天,XSS漏洞尤其容易被開發(fā)人員忽視,最終可能造成對(duì)個(gè)人信息的泄漏。如今,...
摘要:禁止內(nèi)聯(lián)腳本執(zhí)行規(guī)則較嚴(yán)格,目前發(fā)現(xiàn)使用。典型的攻擊流程受害者登錄站點(diǎn),并保留了登錄憑證。站點(diǎn)接收到請(qǐng)求后,對(duì)請(qǐng)求進(jìn)行驗(yàn)證,并確認(rèn)是受害者的憑證,誤以為是無辜的受害者發(fā)送的請(qǐng)求。攻擊完成,攻擊者在受害者不知情的情況下,冒充受害者完成了攻擊。 隨著互聯(lián)網(wǎng)的發(fā)展,各種Web應(yīng)用變得越來越復(fù)雜,滿足了用戶的各種需求的同時(shí),各種網(wǎng)絡(luò)安全問題也接踵而至。作為前端工程師的我們也逃不開這個(gè)問題,今天一起...
摘要:禁止內(nèi)聯(lián)腳本執(zhí)行規(guī)則較嚴(yán)格,目前發(fā)現(xiàn)使用。典型的攻擊流程受害者登錄站點(diǎn),并保留了登錄憑證。站點(diǎn)接收到請(qǐng)求后,對(duì)請(qǐng)求進(jìn)行驗(yàn)證,并確認(rèn)是受害者的憑證,誤以為是無辜的受害者發(fā)送的請(qǐng)求。攻擊完成,攻擊者在受害者不知情的情況下,冒充受害者完成了攻擊。 隨著互聯(lián)網(wǎng)的發(fā)展,各種Web應(yīng)用變得越來越復(fù)雜,滿足了用戶的各種需求的同時(shí),各種網(wǎng)絡(luò)安全問題也接踵而至。作為前端工程師的我們也逃不開這個(gè)問題,今天...
摘要:示例攻擊如何進(jìn)行下圖展示了攻擊者如何進(jìn)行攻擊攻擊者利用網(wǎng)站的表單插入惡意字符串到網(wǎng)站數(shù)據(jù)庫中。恰恰相反,至少有兩種常見的方式,會(huì)導(dǎo)致受害者發(fā)起針對(duì)自己的反射型攻擊。攻擊者精心構(gòu)造了一個(gè)包含惡意字符串的,將其發(fā)送給受害者。 原文地址:http://excess-xss.com/。如有翻譯不當(dāng)之處,歡迎指出 :D 分為四部分: 概述 XSS 攻擊 XSS 防御 總結(jié) 第一部分:概述 X...
摘要:比如基于的方法我認(rèn)為只有是正當(dāng)?shù)睦@過同源策略的方法同源策略是瀏覽器安全策略的基礎(chǔ),但同源策略面對(duì)很多攻擊是無能為力的,比如跨站腳本攻擊,名字跟同源策略很像,事實(shí)上他們之間基本沒有關(guān)系。 作者:肖光宇 野狗科技聯(lián)合創(chuàng)始人,先后在貓撲、百度、搜狗任職,愛折騰的前端工程師。野狗官博:https://blog.wilddog.com/ 野狗官網(wǎng):https://www.wilddog.com...