Vue项目如何进行XSS防护

news2024/11/16 22:34:58

前言

在目前主推网络安全的情况下,很多开发项目都需要在上线前进行渗透测试,当符合渗透测试标准及没有安全漏洞即可正常上线,当前还会有代码审计的,这个另当别论。

如何对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 {
        // 如果不是可信来源,移除 iframe
        return ''
      }
    }
  },
  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.coloradmin.cn/o/1698744.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gcc g++不同版本切换命令

sudo update-alternatives --config g sudo update-alternatives --config gcc ubuntu20.04 切换 gcc/g 版本_ubuntu降低g版本-CSDN博客

MDK安装

MDK安装 1 MDK的差异2 切换MDK3 安装芯片支持包注意点 1 MDK的差异 不同版本MDK有略微的差别&#xff0c;比如&#xff1a;MDK536.EXE&#xff0c;支持版本5的交叉编译链。如下图所示&#xff1a; 而MDK539.EXE不支持版本5的交叉编译链&#xff0c;所以工作的时候&#xff0c…

是的,我换logo了!

大家好&#xff0c;我是记得诚。 当你收到推文的时候&#xff0c;会发现记得诚换logo了&#xff01; 之前是这样的。 现在是这样的。 这个新logo&#xff08;头像&#xff09;是2年前在淘宝上请人做的&#xff0c;价值37人民币&#xff0c;但一直没有换上。当时还发了一个朋友…

netcat一键开始瑞士军刀模式(KALI工具系列六)

目录 1、KALI LINUX简介 2、netcat工具简介 3、在KALI中使用netcat 3.1 目标主机IP&#xff08;win&#xff09; 3.2 KALI的IP 4、命令示例 4.1 测试某IP的端口是否打开 4.2 TCP扫描 4.3 UDP扫描 4.4 端口刺探 4.5 直接扫描 5、即时通信 5.1 单击对话互联 5.2 传…

初中英语优秀作文分析-002Who stole the cupcake-谁偷了纸杯蛋糕?

更多资源请关注纽扣编程微信公众号 记忆树 1 One Sunday afternoon, Leslie was at home with her kids, 3-year-old Angel, 6-year-old Carl, and 7-year-old Tony. 翻译 一个周日的下午&#xff0c;Leslie和她的孩子们在家&#xff0c;他们是3岁的Angel&#xff0c;6岁的…

告别红色波浪线:tsconfig.json 配置详解

使用PC端的朋友&#xff0c;请将页面缩小到最小比例&#xff0c;阅读最佳&#xff01; tsconfig.json 文件用于配置 TypeScript 项目的编译选项。如果配不对&#xff0c;就会在项目中显示一波又一波的红色波浪线&#xff0c;警告你这些地方的类型声明存在问题。 一般我们遇到这…

[LDAP: error code 34 - invalid DN]

目前我的项目版本&#xff1a; Spring版本:5.3.15SpringBoot版本:2.6.3 完整错误 org.springframework.ldap.InvalidNameException: [LDAP: error code 34 - invalid DN]; nested exception is javax.naming.InvalidNameException: [LDAP: error code 34 - invalid DN]at org.s…

STM32—HAL-PWM-舵机180(每个频率对应每个角度)

1开启时钟 2开启定时器和通道设置为PWM模式 3将定时时间设置为50Hz(20ms)//每25为1ms 4代码编写 4.1开启PWM 4.2改PWM的占空比 4.3效果0~180度在0度 源码 /* USER CODE BEGIN Header */ /******************************************************************************…

OceanBase SQL 诊断和调优实践——【DBA从入门到实践】第七期

数据库作为绝大多数应用系统储存数据的核心系统&#xff0c;在用户系统需要访问数据时&#xff0c;有着至关重要的作用。在这些交互中&#xff0c;SQL 语言是应用与数据库系统之间“沟通”的桥梁&#xff0c;它负责将应用的指令传达给数据库。因此&#xff0c;SQL 的性能好坏直…

SHAP值加持医学独立危险因素鉴定分析

SHAP值加持医学独立危险因素鉴定分析 医学独立危险因素鉴定是医学数据分析中的重要形式&#xff0c;旨在从众多临床因素中识别出对临床结局产生重大影响的因素&#xff0c;并通过干预这些因素来改善临床结果。例如&#xff0c;通过识别吸烟是肺癌的危险因素&#xff0c;倡导戒…

【数学代码】求两点之间的距离

Hello&#xff01;大家好&#xff0c;今天讲讲求两点之间的距离。 已知点A的坐标为&#xff08;x1,y1&#xff09;,点B的坐标为&#xff08;x2,y2&#xff09;&#xff0c;求两点之间的直线距离。 首先&#xff0c;我先讲明&#xff0c;要解决这个问题&#xff0c;需要用到勾…

信息学奥赛初赛天天练-12-数论-整除问题

更多资源请关注纽扣编程微信公众号 整除的性质 1 整除性 若 &#x1d44e; 和 &#x1d44f; 都为整数&#xff0c; &#x1d44e; 整除 &#x1d44f; 是指 &#x1d44f; 是 &#x1d44e; 的倍数&#xff0c;&#x1d44e; 是 &#x1d44f; 的约数&#xff08;或者叫 因…

在线软件包管理

1.APT工作原理 APT&#xff08;Advanced Packaging Tool&#xff09;是Debian系列Linux操作系统中广泛使用的包管理工具&#xff0c;它为用户提供了从软件仓库搜索、安装、升级和卸载软件包的功能。其工作原理具体分析如下&#xff1a; 1. **集中式软件仓库机制**&#xff1a…

Android:使用Kotlin搭建MVVM架构模式

一、简介Android MVVM架构模式 MVVM全称&#xff1a;Model、View、ViewModel&#xff1b; Model&#xff1a;负责数据的请求、解析、过滤等数据层操作&#xff0c;其中Repository: 提供数据的 API&#xff08;从本地或者网络&#xff09;。View&#xff1a;负责视图部分展示Vie…

可以通过哪些方式邀请媒体报道宣传?

在我个人的职业生涯中,曾经历过一段为了公司新产品的推广,而独自踏上了寻找媒体曝光机会的征途。这段经历至今仍历历在目,它不仅是一段挑战自我的过程,也是我深刻理解到传统媒体联系方式局限性的重要转折点。 起初,我满怀激情地决定通过直接联系媒体来获取免费的宣传机会。我天…

Java进阶学习笔记26——包装类

包装类&#xff1a; 包装类就是把基本类型的数据包装成对象。 看下API文档&#xff1a; deprecated&#xff1a;极力反对、不赞成的意思。 marked for removal&#xff1a;标识为去除的意思。 自动装箱&#xff1a;基本数据类型可以自动转换成包装类。 自动拆箱&#xff1a;…

Flutter仿照微信实现九宫格头像

一、效果图 2、主要代码 import dart:io; import dart:math;import package:cached_network_image/cached_network_image.dart; import package:flutter/material.dart;class ImageGrid extends StatelessWidget {final List<String> imageUrls; // 假设这是你的图片URL…

echarts-地图

使用地图的三种的方式&#xff1a; 注册地图(用json或svg,注册为地图)&#xff0c;然后使用map地图使用geo坐标系&#xff0c;地图注册后不是直接使用&#xff0c;而是注册为坐标系。直接使用百度地图、高德地图&#xff0c;使用百度地图或高德地图作为坐标系。 用json或svg注…

Kubernetes集群上的Etcd备份和恢复

在本教程中&#xff0c;您将学习如何在Kubernetes集群上使用etcd快照进行etcd备份和恢复。 在Kubernetes架构中&#xff0c;etcd是集群的重要组成部分。所有集群对象及其状态都存储在etcd中。为了更好地理解Kubernetes&#xff0c;有几点关于etcd的信息是您需要了解的。 它是…

C++学习笔记(19)——模板

目录 模板参数与非类型模板参数 模板参数 类型模板参数——传递类型 非类型模板参数——传递数量 C11希望array替代静态数组&#xff0c;但实际上vector包揽了一切 模板总结 优点&#xff1a; 缺点&#xff1a; 模板特化&#xff1a;针对某些类型进行特殊化处理 特化…