xss跨站腳本攻擊(Cross Site Scripting),是一種經(jīng)常出現(xiàn)在web應(yīng)用中的計(jì)算機(jī)安全漏洞,指攻擊者在網(wǎng)頁(yè)中嵌入客戶端腳本(例如JavaScript), 當(dāng)用戶瀏覽此網(wǎng)頁(yè)時(shí),腳本就會(huì)在用戶的瀏覽器上執(zhí)行,從而達(dá)到攻擊者的目的。比如獲取用戶的Cookie,導(dǎo)航到惡意網(wǎng)站,攜帶木馬等。
大部分的xss漏洞都是由于沒有處理好用戶的輸入,導(dǎo)致攻擊腳本在瀏覽器中執(zhí)行,這就是跨站腳本漏洞的根源。
xss攻擊類型
1.非持久型XSS攻擊
非持久型XSS(Non-persistent)又叫做反射XSS(Reflect XSS),它是指那些瀏覽器每次都要在參數(shù)中提交惡意數(shù)據(jù)才能觸發(fā)的跨站腳本漏洞。
非持久型XSS漏洞實(shí)際上大多數(shù)攻擊數(shù)據(jù)是包含在URL中的,類似這樣的:http://www.vicitim.com/vul.asp?hi=[code]。需要用戶的瀏覽器訪問(wèn)到這個(gè)URL惡意代碼才執(zhí)行,攻擊者一般會(huì)把URL發(fā)給用戶讓用戶通過(guò)瀏覽器去訪問(wèn)。不過(guò)URL里面帶有稀奇古怪的代碼確實(shí)有點(diǎn)奇怪,為了掩人耳目,攻擊者可以發(fā)一個(gè)看起來(lái)沒問(wèn)題的URL,再通過(guò)那個(gè)頁(yè)面跳轉(zhuǎn)到惡意的URL;甚至也可以讓一個(gè)域名轉(zhuǎn)向到惡意URL,把那個(gè)域名發(fā)給用戶。
2.持久型XSS攻擊
持久型XSS(Persistent)又叫做存儲(chǔ)XSS(Stored XSS),與非持久型XSS相反,它是指通過(guò)提交惡意數(shù)據(jù)到存儲(chǔ)器(比如數(shù)據(jù)庫(kù)、文本文件等),Web應(yīng)用程序輸出的時(shí)候是從存儲(chǔ)器中讀出惡意數(shù)據(jù)輸出到頁(yè)面的一類跨站腳本漏洞。
持久型XSS攻擊就簡(jiǎn)單一點(diǎn),只要第一次把攻擊代碼提交到服務(wù)器就一勞永逸了。比如我在某個(gè)論壇發(fā)帖的時(shí)候,論壇沒有對(duì)傳入的HTML作處理,那么我就可以發(fā)一個(gè)帖子內(nèi)容包含“[code]”的帖子。呵呵,然后就守株待兔地等著來(lái)看帖子的人執(zhí)行惡意腳本了。持久型XSS漏洞是把惡意腳本存儲(chǔ)到了數(shù)據(jù)庫(kù),訪問(wèn)頁(yè)面的時(shí)候完全沒有預(yù)兆,所以它的危害也比非持久型XSS略微高一點(diǎn)。
常見的xss攻擊方法
1.繞過(guò)XSS-Filter,利用<>標(biāo)簽注入Html/JavaScript代碼;
5. 利用CSS跨站。例如:Body {backgrund-image: url(“javascript:alert(‘xss’)”)};
7.利用字符編碼,透過(guò)這種技巧,不僅能讓XSS代碼繞過(guò)服務(wù)端的過(guò)濾,還能更好地隱藏Shellcode;(JS支持unicode、eacapes、十六進(jìn)制、十進(jìn)制等編碼形式)
8.拆分跨站法,將xss攻擊的代碼拆分開來(lái),適用于應(yīng)用程序沒有過(guò)濾 XSS關(guān)鍵字符(如<、>)卻對(duì)輸入字符長(zhǎng)度有限制的情況下;
9.DOM型的XSS主要是由客戶端的腳本通過(guò)DOM動(dòng)態(tài)地輸出數(shù)據(jù)到頁(yè)面上,它不依賴于提交數(shù)據(jù)到服務(wù)器,而是從客戶端獲得DOM中的數(shù)據(jù)在本地執(zhí)行。容易導(dǎo)致DOM型的XSS的輸入源包括:Document.URL、Location(.pathname|.href|.search|.hash)、
Document.referrer、Window.name、Document.cookie、localStorage/globalStorage;
XSS攻擊防御
原則:不相信客戶輸入的數(shù)據(jù)
注意:? 攻擊代碼不一定在中
1.使用XSS Filter。
輸入過(guò)濾,對(duì)用戶提交的數(shù)據(jù)進(jìn)行有效性驗(yàn)證,僅接受指定長(zhǎng)度范圍內(nèi)并符合我們期望格式的的內(nèi)容提交,阻止或者忽略除此外的其他任何數(shù)據(jù)。比如:電話號(hào)碼必須是數(shù)字和中劃線組成,而且要設(shè)定長(zhǎng)度上限。過(guò)濾一些些常見的敏感字符,例如:< > ‘ “ & # \ javascript expression ?"onclick=" ?"onfocus";過(guò)濾或移除特殊的Html標(biāo)簽, 例如: , iframe> ,? < for , " for;過(guò)濾JavaScript 事件的標(biāo)簽,例如 "onclick=", "onfocus" 等等。
輸出編碼,當(dāng)需要將一個(gè)字符串輸出到Web網(wǎng)頁(yè)時(shí),同時(shí)又不確定這個(gè)字符串中是否包括XSS特殊字符(如< > &‘”等),為了確保輸出內(nèi)容的完整性和正確性,可以使用編碼(HTMLEncode)進(jìn)行處理。
2.DOM型的XSS攻擊防御
把變量輸出到頁(yè)面時(shí)要做好相關(guān)的編碼轉(zhuǎn)義工作,如要輸出到 中,可以進(jìn)行JS編碼;要輸出到HTML內(nèi)容或?qū)傩?,則進(jìn)行HTML編碼處理。根據(jù)不同的語(yǔ)境采用不同的編碼處理方式。
3.HttpOnly Cookie
將重要的cookie標(biāo)記為http only, ? 這樣的話當(dāng)瀏覽器向Web服務(wù)器發(fā)起請(qǐng)求的時(shí)就會(huì)帶上cookie字段,但是在腳本中卻不能訪問(wèn)這個(gè)cookie,這樣就避免了XSS攻擊利用JavaScript的document.cookie獲取cookie:
原鏈接:https://www.cnblogs.com/wqhwe/p/5416976.html