Vue項目如何進行XSS防護

前言

在目前主推網絡安全的情況下,很多開發項目都需要在上線前進行滲透測試,當符合滲透測試標準及沒有安全漏洞即可正常上線,當前還會有代碼審計的,這個另當別論。

如何對XSS進行防護

在很多的富文本編輯器項目中,xss漏洞已經是家常便飯了。接下來直接上修復代碼。
當前使用環境為vue3+ts+vite項目,首先安裝依賴

npm install xss

在main.ts中引入

import xss from 'xss'

然后全局掛在自定義方法,這里提供兩種掛在方法

第一種

//掛在全局xss過濾器方法
app.config.globalProperties.$xss = (html: any) => {return xss(html)
}

在組件中的使用

import { getCurrentInstance } from 'vue'const instance = getCurrentInstance()
if (!instance) {// 處理無法獲取到實例的情況throw new Error('Cannot get current instance')
}
// 通過實例的 appContext.config.globalProperties 訪問 $xss
const $xss = instance.appContext.config.globalProperties.$xss
console.log($xss('<img src=q οnerrοr=alert(1)>'))

在這里插入圖片描述

第二種

const $xss = (html: any): any => {return xss(html)
}
// 使用 provide 提供 $xss 方法
app.provide('$xss', $xss)

組件中的使用

import { inject } from 'vue'
// 使用 inject 注入 $xss 方法
const $xss: any = inject('$xss')
console.log($xss('<img src=q οnerrοr=alert(1)>'))

在這里插入圖片描述
在v-html中沒有過濾xss的效果

在這里插入圖片描述
在v-html中使用xss過濾后的效果
在這里插入圖片描述

CSS樣式丟失處理

很不巧過濾完css出現了css樣式代碼丟失,我應該如何解決,這種情況一般都是我們的過濾太嚴格了,我們添加一些自己允許的白名單配置即可。出現下圖狀況
在這里插入圖片描述
修復方案

const options: any = {onIgnoreTagAttr: function(tag: any, name: any, value: any, isWhiteAttr: any) {if (name.substr(0, 2) === 'on') {return '' // 過濾掉所有的事件監聽器屬性,例如 onclick}// 如果屬性是 style,并且不在白名單內,仍然允許它通過if (name === 'style' || name === 'iframe') {return `${name}="${value}"` // 直接返回 style 屬性}},onTag: (tag: any, html: any) => {if (tag === 'style') {// 當遇到 style 標簽時,直接返回,不做處理return html}if (tag === 'iframe') {// 從 HTML 字符串中解析出 src 屬性的值const srcMatch = html.match(/src="([^"]+)"/)const src = srcMatch ? srcMatch[1] : ''// 驗證 src 是否來自可信來源if (src.startsWith('http://www.iot-wiki.cn')) {return html} else {// 如果不是可信來源,移除 iframereturn ''}}},stripIgnoreTag: true, // 去除不在白名單上的標簽stripIgnoreTagBody: ['script'],// 去除不在白名單上的標簽及其內容css: false
}
const $xss = (html: any): any => {return xss(html, options)
}
// 使用 provide 提供 $xss 方法
app.provide('$xss', $xss)

在這里插入圖片描述
在這里插入圖片描述

最后

如果你的項目是vue2+webpack+js的話,推薦使用vue-xss庫,方便快捷
安裝命令

npm install vue-xss

在main.js中引入并且使用

import VueXss from 'vue-xss'
Vue.use(VueXss)

在組件中的使用

<div v-html="$xss(content)"></div>

如果你的是陰間項目,使用的是vue2+ts+webpack的項目,那你可以參考上面的vue3+ts+vite項目的使用方法,注意vue2和vue3全局掛在自定義方法是不一樣的,這里需要自行修改。

*如果有更好的解決方案歡迎評論diss我

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14392.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14392.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14392.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leecode熱題100---994:腐爛的橘子

題目&#xff1a; 在給定的 m x n 網格 grid 中&#xff0c;每個單元格可以有以下三個值之一&#xff1a; 值 0 代表空單元格&#xff1b; 值 1 代表新鮮橘子&#xff1b; 值 2 代表腐爛的橘子。 每分鐘&#xff0c;腐爛的橘子 周圍 4 個方向上相鄰 的新鮮橘子都會腐爛。 返回…

C++之第九課

課程列表 今天&#xff0c;我們要學習一種結構&#xff1a;循環結構。 循環的方法有3種。 今天先將第1種for學了&#xff1a; int a;//循環變量 int b; for(a1;a<10;a){//像if那樣“打包”cout<<a<<" ";b; } 當然&#xff0c;也可以這樣寫&#…

【MySQL精通之路】InnoDB(5)-內存結構

總目錄&#xff1a; 【MySQL精通之路】InnoDB存儲引擎-CSDN博客 上一篇&#xff1a; 【MySQL精通之路】InnoDB(4)-架構圖-CSDN博客 目錄 ?編輯 1 緩存池&#xff08;Buffer Pool&#xff09; 1.1 緩存池LRU算法 1.2 緩存區配置 1.3 使用InnoDB標準監視器監視緩存池 …

SSRF服務端請求偽造漏洞原理與修復及靶場實踐

SSRF服務端請求偽造漏洞原理與修復及靶場實踐 SSRF漏洞原理與檢測 SSRF&#xff08;Server-Side Request Forgery&#xff0c;服務器端請求偽造&#xff09;漏洞是一種因為服務端提供了遠程訪問服務&#xff0c;而并未對請求目標進行限制或限制不嚴格而引起的安全漏洞&#x…

Java Apache Jexl規則引擎初體驗

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、模板引擎的選擇&#xff1f;二、什么是JEXL規則引擎&#xff1f;優點缺點 三、其他規則引擎四、示例1.引入依賴2.方法示例3、代碼解釋4、效果![import java…

VMware虛擬機Ubuntu 22.04.4 LTS系統 NAT網絡設置異常解決

現象&#xff1a; 近日&#xff0c;一直工作正常的虛擬機莫名出現網絡無法連接的情況。 參考網上的各種教程&#xff0c;終于解決問題。 如遇到類似情況的&#xff0c;可以嘗試這個方式&#xff0c;看能否解決問題。 網絡連接&#xff1a;采用NAT模式 異常&#xff1a;網絡圖標…

C++數據結構——哈希表

前言&#xff1a;本篇文章將繼續進行C數據結構的講解——哈希表。 目錄 一.哈希表概念 二.哈希函數 1.除留取余法 三.哈希沖突 1.閉散列 線性探測 &#xff08;1&#xff09;插入 &#xff08;2&#xff09;刪除 2. 開散列 開散列概念 四.閉散列哈希表 1.基本框架 …

場內期權怎么開戶?傭金手續費最低是多少?

今天期權懂帶你了解場內期權怎么開戶&#xff1f;傭金手續費最低是多少&#xff1f;我國的首個場內期權是50ETF期權&#xff0c;隨著投資者對期權產品日漸熟悉&#xff0c;投資者參與數量與交易量穩步增長。 場內期權怎么開戶&#xff1f; 滿足資金要求&#xff1a;根據監管要…

自動打卡腳本

奕輔導自動打卡腳本 打卡腳本&#xff0c;使用前需手動打卡一次并需要抓包&#xff0c;在其中找到相關的token。 # -*- encoding:utf-8 -*-import requests import jsonpunch_in_data {"questionnairePublishEntityId": "1001640744275339000980000000001&qu…

MyBatis:Parameter Maps collection does not contain value for 報錯解決收錄

MyBatis&#xff1a;Parameter Maps collection does not contain value for 報錯問題解決收錄 1.報錯收錄 后端測試時偶然遇到的用mybatis生成好的mapper文件&#xff0c;報Result Maps collection does not contain value…的錯誤 2.報錯分析 java.lang.ILledalAraumentEx…

必應bing國內廣告開戶首充和開戶費是多少?

微軟必應Bing作為國內領先的搜索引擎之一&#xff0c;其廣告平臺憑借其精準的投放、高效的數據分析和廣泛的用戶覆蓋&#xff0c;已成為眾多企業的首選。 根據最新政策&#xff0c;2024年必應Bing國內廣告開戶預充值金額設定為1萬元人民幣起。這一調整旨在確保廣告主在賬戶初始…

【嵌入式DIY實例】-OLED顯示DHT22傳感器數據

OLED顯示DHT22傳感器數據 1、應用實例介紹 本次實例將演示如何在OLED中顯示DHT22溫度濕度傳感器的數據。實例主要分兩步來完成: DHT22傳感器驅動,采集溫度和濕度OLED驅動,顯示采集到的溫度值和濕度值。在前面的文章中,對OLED的應用和驅動做了介紹,請參考: ESP8266-Ardu…

1.Nginx上配置 HTTPS

1.安裝 Nginx&#xff1a; 如果還沒有安裝 Nginx&#xff0c;可以使用包管理工具安裝。例如&#xff0c;在 Ubuntu 上&#xff1a; sudo apt update sudo apt install nginx2.上傳證書和私鑰文件&#xff1a; 將你的證書文件和私鑰文件上傳到服務器上的某個目錄&#xff0c;…

VBA宏指令寫的方法突然不能用了

背景:項目組有個自動化測試項目,實在excel中利用VBA開發的;時間比較久遠,我前面的哥們走后,這個軟件一直在用,最近系統不知道是不是更新的緣故;有些代碼除了問題; 先上源碼: Dim Conn As Object, Rst As Object Dim sqlStr$ Dim str_start_SN$, str2$ str_start_SN …

python 線性回歸模型

教材鏈接-3.2. 線性回歸的從零開始實現 c實現 該博客僅用于記錄一下自己的代碼&#xff0c;可與c實現作為對照 from d2l import torch as d2l import torch import random # nn是神經網絡的縮寫 from torch import nn from torch.utils import data# 加載訓練數據 # 加載訓…

什么是網關,網關有哪些作用?

網關(Gateway)是在計算機網絡中用于連接兩個獨立的網絡的設備&#xff0c;它能夠在兩個不同協議的網絡之間傳遞數據。在互聯網中&#xff0c;網關是一個可以連接不同協議的網絡的設備&#xff0c;比如說可以連接局域網和互聯網&#xff0c;它可以把局域網 的內部網絡地址轉換成…

論文閱讀--GLIP

把detection和phrase ground(對于給定的sentence&#xff0c;要定位其中提到的全部物體)這兩個任務合起來變成統一框架&#xff0c;從而擴展數據來源&#xff0c;因為文本圖像對的數據還是很好收集的 目標檢測的loss是分類loss定位loss&#xff0c;它與phrase ground的定位los…

爬蟲學習--11.MySQL數據庫的基本操作(上)

MySQL數據庫的基本操作 創建數據庫 我們可以在登陸 MySQL 服務后&#xff0c;使用命令創建數據庫&#xff0c;語法如下: CREATE DATABASE 數據庫名; 顯示所有的數據庫 show databases; 刪除數據庫 使用普通用戶登陸 MySQL 服務器&#xff0c;你可能需要特定的權限來創建或者刪…

Docker部署Minio小記

概述 因為工作需要搭建對象存儲的測試環境&#xff0c;故而使用Docker部署Minio&#xff0c;測試通過博文記錄用以備忘 步驟 拉取鏡像 docker pull minio/minio啟動容器 docker run -p 9000:9000 -p 9090:9090 \--name minio \-d --restartalways \-e "MINIO_ACCESS_K…

內臟油脂是什么?如何減掉?

真想減的人&#xff0c;減胖是很容易的&#xff0c;但想要形體美又健康&#xff0c;還是得從減內臟油脂開始&#xff0c;那么&#xff0c;問題來了&#xff0c;什么是內臟油脂&#xff1f; 油脂它分部于身體的各個角落&#xff0c;四肢、腹部、腰、臀部、臉、脖子...等&#xf…