前端XSS攻擊和防御

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 跨站腳本(XSS)是web應(yīng)用中的一種典型的計(jì)算機(jī)安全漏洞。XSS允許攻擊者可以在其他用戶瀏覽的web頁(yè)面中注入客...
    留七七閱讀 8,300評(píng)論 1 26
  • 1.XSS (Cross Site Script) ,跨站腳本攻擊 有句話說(shuō) 所有的輸入都是有害的。 跨站腳本是最...
    大頹寶寶閱讀 17,788評(píng)論 1 23
  • 前端攻擊成因 在web網(wǎng)頁(yè)的腳本中,有些部分的顯示內(nèi)容會(huì)依據(jù)外界輸入值而發(fā)生變化,而如果這些聲稱html的程序中存...
    隨波逐流007閱讀 935評(píng)論 0 1
  • 攻擊活動(dòng) SQL(結(jié)構(gòu)化查詢語(yǔ)言)注入 概述 一個(gè)SQL注入攻擊包含了從應(yīng)用客戶端的輸入數(shù)據(jù)中注入或嵌入的方式,一...
    夏夜星語(yǔ)閱讀 1,125評(píng)論 0 0
  • 前段時(shí)間在學(xué)習(xí)Web安全方面的知識(shí),對(duì)這方面有了進(jìn)一步的了解,決定寫文章記錄下來(lái),只是對(duì)Web安全方面知識(shí)的一些總...
    邱振源的博客閱讀 1,325評(píng)論 0 1

友情鏈接更多精彩內(nèi)容