前端XSS攻擊和防御

xss跨站腳本攻擊(Cross Site Scripting),是一種經(jīng)常出現(xiàn)在web應(yīng)用中的計算機(jī)安全漏洞,指攻擊者在網(wǎng)頁中嵌入客戶端腳本(例如JavaScript), 當(dāng)用戶瀏覽此網(wǎng)頁時,腳本就會在用戶的瀏覽器上執(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ù)據(jù)是包含在URL中的,類似這樣的:http://www.vicitim.com/vul.asp?hi=[code]。需要用戶的瀏覽器訪問到這個URL惡意代碼才執(zhí)行,攻擊者一般會把URL發(fā)給用戶讓用戶通過瀏覽器去訪問。不過URL里面帶有稀奇古怪的代碼確實有點(diǎn)奇怪,為了掩人耳目,攻擊者可以發(fā)一個看起來沒問題的URL,再通過那個頁面跳轉(zhuǎn)到惡意的URL;甚至也可以讓一個域名轉(zhuǎn)向到惡意URL,把那個域名發(fā)給用戶。

2.持久型XSS攻擊

持久型XSS(Persistent)又叫做存儲XSS(Stored XSS),與非持久型XSS相反,它是指通過提交惡意數(shù)據(jù)到存儲器(比如數(shù)據(jù)庫、文本文件等),Web應(yīng)用程序輸出的時候是從存儲器中讀出惡意數(shù)據(jù)輸出到頁面的一類跨站腳本漏洞。

持久型XSS攻擊就簡單一點(diǎn),只要第一次把攻擊代碼提交到服務(wù)器就一勞永逸了。比如我在某個論壇發(fā)帖的時候,論壇沒有對傳入的HTML作處理,那么我就可以發(fā)一個帖子內(nèi)容包含“[code]”的帖子。呵呵,然后就守株待兔地等著來看帖子的人執(zhí)行惡意腳本了。持久型XSS漏洞是把惡意腳本存儲到了數(shù)據(jù)庫,訪問頁面的時候完全沒有預(yù)兆,所以它的危害也比非持久型XSS略微高一點(diǎn)。

常見的xss攻擊方法

1.繞過XSS-Filter,利用<>標(biāo)簽注入Html/JavaScript代碼;

5. 利用CSS跨站。例如:Body {backgrund-image: url(“javascript:alert(‘xss’)”)};

7.利用字符編碼,透過這種技巧,不僅能讓XSS代碼繞過服務(wù)端的過濾,還能更好地隱藏Shellcode;(JS支持unicode、eacapes、十六進(jìn)制、十進(jìn)制等編碼形式)

8.拆分跨站法,將xss攻擊的代碼拆分開來,適用于應(yīng)用程序沒有過濾 XSS關(guān)鍵字符(如<、>)卻對輸入字符長度有限制的情況下;

9.DOM型的XSS主要是由客戶端的腳本通過DOM動態(tài)地輸出數(shù)據(jù)到頁面上,它不依賴于提交數(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。

輸入過濾,對用戶提交的數(shù)據(jù)進(jìn)行有效性驗證,僅接受指定長度范圍內(nèi)并符合我們期望格式的的內(nèi)容提交,阻止或者忽略除此外的其他任何數(shù)據(jù)。比如:電話號碼必須是數(shù)字和中劃線組成,而且要設(shè)定長度上限。過濾一些些常見的敏感字符,例如:< > ‘ “ & # \ javascript expression ?"onclick=" ?"onfocus";過濾或移除特殊的Html標(biāo)簽, 例如: , iframe> ,? < for , " for;過濾JavaScript 事件的標(biāo)簽,例如 "onclick=", "onfocus" 等等。

輸出編碼,當(dāng)需要將一個字符串輸出到Web網(wǎng)頁時,同時又不確定這個字符串中是否包括XSS特殊字符(如< > &‘”等),為了確保輸出內(nèi)容的完整性和正確性,可以使用編碼(HTMLEncode)進(jìn)行處理。

2.DOM型的XSS攻擊防御

把變量輸出到頁面時要做好相關(guān)的編碼轉(zhuǎn)義工作,如要輸出到 中,可以進(jìn)行JS編碼;要輸出到HTML內(nèi)容或?qū)傩?,則進(jìn)行HTML編碼處理。根據(jù)不同的語境采用不同的編碼處理方式。

3.HttpOnly Cookie

將重要的cookie標(biāo)記為http only, ? 這樣的話當(dāng)瀏覽器向Web服務(wù)器發(fā)起請求的時就會帶上cookie字段,但是在腳本中卻不能訪問這個cookie,這樣就避免了XSS攻擊利用JavaScript的document.cookie獲取cookie:

原鏈接:https://www.cnblogs.com/wqhwe/p/5416976.html

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

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

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