Vue解決V-HTML指令潛在的XSS攻擊('v-html' directive can lead to XSS attack.)

什么是 XSS 攻擊?

XSS是跨站腳本攻擊(Cross-Site Scripting)的簡(jiǎn)稱。

XSS是一種注入腳本式攻擊,攻擊者利用如提交表單、發(fā)布評(píng)論等方式將事先準(zhǔn)備好的惡意腳本注入到那些良性可信的網(wǎng)站中。

當(dāng)其他用戶進(jìn)入該網(wǎng)站后,腳本就在用戶不知情的情況下偷偷地執(zhí)行了,這樣的腳本可能會(huì)竊取用戶的信息、修改頁(yè)面內(nèi)容、或者偽造用戶執(zhí)行其他操作等等,后果不可估量。

發(fā)送到Web瀏覽器的惡意內(nèi)容通常采用JavaScript代碼片段的形式,但也可能包括HTML,F(xiàn)lash或?yàn)g覽器可能執(zhí)行的任何其他類型的代碼。

簡(jiǎn)單模擬一個(gè):
HTML:
<div v-html="src" />
JS:
src: "<img src='../ww.png' onerror='alert(1)'/> "
運(yùn)行之后由于src地址對(duì)應(yīng)的資源找不到,會(huì)觸發(fā)img標(biāo)簽的error事件,最終alert彈框。這便是一個(gè)最簡(jiǎn)單的xss攻擊。


image.png

解決方案兩種,推薦法1:

法1:

一、下載依賴

cnpm install vue-dompurify-html

二、main.js中引入xss包并掛載到vue原型上

import VueDOMPurifyHTML from 'vue-dompurify-html'
Vue.use(VueDOMPurifyHTML)

三、使用

 <div v-dompurify-html="src" />

法2:

一、下載依賴

npm install xss --save

二、main.js中引入xss包并掛載到vue原型上

import xss from 'xss'
Vue.prototype.xss = xss

三、在vue.config.js中覆寫(xiě)html指令

  chainWebpack: config => {
    config.module
      .rule('vue')
      .use('vue-loader')
      .loader('vue-loader')
      .tap(options => {
        options.compilerOptions.directives = {
          html(node, directiveMeta) {
            (node.props || (node.props = [])).push({
              name: 'innerHTML',
              value: `xss(_s(${directiveMeta.value}))`
            })
          }
        }
        return options
      })
  }

四、使用

 <div v-dompurify-html="src" />

注:努力踩坑!
image.png
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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