Web安全之XSS攻擊與防御小結(jié)
Web安全之XSS攻防
1. XSS的定義
跨站腳本攻擊(Cross Site Scripting),縮寫(xiě)為XSS。惡意攻擊者往Web頁(yè)面里插入惡意Script代碼,當(dāng)用戶(hù)瀏覽該頁(yè)之時(shí),嵌入其中Web里面的Script代碼會(huì)被執(zhí)行,從而達(dá)到惡意攻擊用戶(hù)的目的。
2. XSS的原理
- 攻擊者對(duì)含有漏洞的服務(wù)器發(fā)起XSS攻擊(注入JS代碼)。
- 誘使受害者打開(kāi)受到攻擊的服務(wù)器URL。
- 受害者在Web瀏覽器中打開(kāi)URL,惡意腳本執(zhí)行。
3. XSS的攻擊方式
(1)反射型: 發(fā)出請(qǐng)求時(shí),XSS代碼出現(xiàn)在URL中,作為輸入提交到服務(wù)器端,服務(wù)器端解析后響應(yīng),XSS隨響應(yīng)內(nèi)容一起返回給瀏覽器,最后瀏覽器解析執(zhí)行XSS代碼,這個(gè)過(guò)程就像一次發(fā)射,所以叫反射型XSS。
(2)存儲(chǔ)型: 存儲(chǔ)型XSS和反射型的XSS差別就在于,存儲(chǔ)型的XSS提交的代碼會(huì)存儲(chǔ)在服務(wù)器端(數(shù)據(jù)庫(kù),內(nèi)存,文件系統(tǒng)等),下次請(qǐng)求目標(biāo)頁(yè)面時(shí)不用再提交XSS代碼。
4. XSS的防御措施
(1)編碼:對(duì)用戶(hù)輸入的數(shù)據(jù)進(jìn)行HTML Entity編碼
(2)過(guò)濾:移除用戶(hù)上傳的DOM屬性,如onerror等,移除用戶(hù)上傳的style節(jié)點(diǎn),script節(jié)點(diǎn),iframe節(jié)點(diǎn)等。
(3)校正:避免直接對(duì)HTML Entity編碼,使用DOM Prase轉(zhuǎn)換,校正不配對(duì)的DOM標(biāo)簽。
5. 應(yīng)用示例
構(gòu)建node應(yīng)用,演示反射型XSS攻擊。(Linux操作系統(tǒng)中)
本例子的代碼地址:https://github.com/Xganying/Web-XSS (xss_test1)
(1) 新建一個(gè)文件夾xss: mkdir xss_test1
(2) 切換目錄到該文件夾下: cd xss
(3) 安裝express: express -e ./
(4) 構(gòu)建應(yīng)用依賴(lài): npm install
(5) 打開(kāi)構(gòu)建好的node應(yīng)用,得到目錄:
(6) 開(kāi)啟node服務(wù):npm start
(7) 在瀏覽器地址欄輸入:localhost:3000 ,得到:
(8) 加入xss
修改xss_test1文件routers目録下的index.js文件:
修改xss_test1文件views目錄下的index.ejs文件:
(9) 重啟node服務(wù):npm start ,打開(kāi)瀏覽器
a. 在地址欄輸入: localhost:3000/?xss=hello
運(yùn)行結(jié)果得到:
b. 在地址欄輸入:localhost:3000/?xss=<img src="null" onerror="alert(1)">
運(yùn)行結(jié)果得到:
說(shuō)明: 如果代碼中沒(méi)有 res.set('X-XSS-Protection', 0);
則會(huì)發(fā)現(xiàn)沒(méi)有彈出框,這是因?yàn)闉g覽器自動(dòng)設(shè)置了攔截XSS,所以onerror事件并不會(huì)執(zhí)行,而加上了:res.set('X-XSS-Protection', 0);
才會(huì)出現(xiàn)彈框,這才完成了一次xss攻擊。
c. 在地址欄輸入:localhost:3000/?xss=<p onclick="alert(%點(diǎn)我%)">點(diǎn)我</p>
運(yùn)行結(jié)果得到:
說(shuō)明: 這種攻擊就是常用于篡改頁(yè)面內(nèi)容,破壞頁(yè)面結(jié)構(gòu),引誘用戶(hù)去點(diǎn)擊一些釣魚(yú)等網(wǎng)站的手段。
d. 在地址欄輸入:localhost:3000/?xss=<iframe src="http://baidu.com/t.html"></iframe>
運(yùn)行結(jié)果得到:
說(shuō)明:這種攻擊就常用于廣告植入等。
簡(jiǎn)單總結(jié)就是: img標(biāo)簽是自動(dòng)觸發(fā)而受到攻擊的,p標(biāo)簽是引誘出發(fā)而受到攻擊的的,而iframe則是廣告植入攻擊的。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
講兩件事:1.this指針的用法小探. 2.ie的attachEvent和firefox的addEventListene
講兩件事:1.this指針的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件處理上的區(qū)別...2007-04-04javascript運(yùn)動(dòng)效果實(shí)例總結(jié)(放大縮小、滑動(dòng)淡入、滾動(dòng))
這篇文章主要介紹了javascript運(yùn)動(dòng)效果,結(jié)合實(shí)例形式總結(jié)分析JavaScript實(shí)現(xiàn)放大縮小、滑動(dòng)淡入、滾動(dòng)等效果的方法,需要的朋友可以參考下2016-01-01Canvas中繪制Geojson數(shù)據(jù)示例詳解
這篇文章主要為大家介紹了Canvas中繪制Geojson數(shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11IE中radio 或checkbox的checked屬性初始狀態(tài)下不能選中顯示問(wèn)題
checked屬性在IE下不能正確實(shí)現(xiàn)的問(wèn)題2009-07-07ES6學(xué)習(xí)教程之對(duì)象的擴(kuò)展詳解
這篇文章主要給大家介紹了ES6中對(duì)象擴(kuò)展的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-05-05JS簡(jiǎn)單實(shí)現(xiàn)自定義右鍵菜單實(shí)例
本篇文章主要介紹了JS簡(jiǎn)單實(shí)現(xiàn)自定義右鍵菜單實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05前端技巧之HTTP中POST提交數(shù)據(jù)四種方式
這篇文章主要為大家介紹了前端技巧之HTTP中POST提交數(shù)據(jù)四種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06js下獲得客戶(hù)端操作系統(tǒng)的函數(shù)代碼(1:vista,2:windows7,3:2000,4:xp,5:2003,6:20
有時(shí)候需要在客戶(hù)端獲取操作系統(tǒng)的版本,以便更好的給用戶(hù)合適的信息,提高用戶(hù)體驗(yàn),好不容易從網(wǎng)站發(fā)現(xiàn)了這段代碼,分享給大家。2011-10-10