安全地使用v-html

news/2024/7/10 0:33:10 标签: 前端, vue

vue2_0">vue2

1、 使用插件DOMPurify

DOMPurify是一个开源的基于DOM的快速XSS净化工具。输入HTML元素,然后通过DOM解析递归元素节点,进行净化,输出安全的HTML

 <div v-html="sanitizedContent"></div>
 
import DOMPurify from 'dompurify'; 
  data () {
    return {
      htmlContent: '<p>Hello, <a href="https://example.com">World</a>!</p>'
    }
  },
  computed: {
    sanitizedContent () {
      return DOMPurify.sanitize(this.htmlContent);
    }
  },

2、手动写过滤函数

<template>
  <div>
    <div v-html="sanitizedContent"></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      htmlContent: '<p>Hello, <a href="https://example.com" target="_blank">World</a>!</p>'
    };
  },
  computed: {
    sanitizedContent() {
      return this.sanitizeHTML(this.htmlContent);
    }
  },
  methods: {
    sanitizeHTML(html) {
      //允许的标签
      const allowedTags = ['p', 'a'];
      //允许的标签属性
      const allowedAttributes = ['href'];

      const tempDiv = document.createElement('div');
      tempDiv.innerHTML = html;

      tempDiv.querySelectorAll('*').forEach(element => {
        if (!allowedTags.includes(element.tagName.toLowerCase())) {
          element.remove();
        } else {
          Array.from(element.attributes).forEach(attribute => {
            if (!allowedAttributes.includes(attribute.name)) {
              element.removeAttribute(attribute.name);
            }
          });
        }
      });

      return tempDiv.innerHTML;
    }
  }
};
</script>

属性对象的类型: NamedNodeMap ,表示属性节点 Attr 对象的集合

vue3_72">vue3

  • vue3多了一个方法
    http://www.mobiletrain.org/about/BBS/256788.html
    利用createVNode方法,用递归的方式,创建虚拟DOM,在构建虚拟DOM树之前,可以对输入的HTML内容进行过滤和处理。

http://www.niftyadmin.cn/n/5435088.html

相关文章

Winform编程详解十:ListBox 列表框

一、属性介绍 1. (Name) 控件的对象标识符ID 2. Items 控件的数据集合 3. BackColor 控件的背景颜色 4. BorderStyle 控件的边框样式 5. Cursor 鼠标移过该控件显示的光标样式 6. Font 控件的字体样式 7. ForeColor 控件的文本颜色 8. UseWaitCursor 使用鼠标的等待光…

PCB板的技术详解和叠构剖析

PCB板作为现代电子信息产业最重要的载体之一&#xff0c;应用在电子电路产业的方方面面&#xff0c;涵盖了智能手机&#xff0c;AI, 显卡&#xff0c;电脑&#xff0c;家用电器&#xff0c;汽车电子等方方面面。本文就PCB板卡叠构做一些分析。 1.PCB是什么&#xff1f; PCB也…

stable diffusion webui 搭建和初步使用

官方repo: GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI 关于stable-diffusion的介绍&#xff1a;Stable Diffusion&#xff5c;图解稳定扩散原理 - 知乎 一、环境搭建和启动 准备在容器里面搞一下 以 ubuntu22.04 为基础镜像&#xff0c;新建…

论文阅读——RSGPT

RSGPT: A Remote Sensing Vision Language Model and Benchmark 贡献&#xff1a;构建了一个高质量的遥感图像描述数据集&#xff08;RSICap&#xff09;和一个名为RSIEval的基准评估数据集&#xff0c;并在新创建的RSICap数据集上开发了基于微调InstructBLIP的遥感生成预训练…

解决谷歌浏览器最新chrome94版本CORS跨域问题

项目场景&#xff1a; 谷歌浏览器升级到chrome94版本出现CORS跨域问题 问题描述 解决谷歌浏览器最新chrome94版本CORS跨域问题。 CORS跨域问题&#xff1a; 升级谷歌浏览器最新chrome94版本后&#xff0c;提示Access to XMLHttpRequest at ‘http://localhost:xxxx/api’ fro…

用尾插的思想实现移除链表中的元素

目录 一、介绍尾插 1.链表为空 2.链表不为空 二、题目介绍 三、思路 四、代码 五、代码解析 1. 2. 3. 4. 5. 6. 六、注意点 1. 2. 一、介绍尾插 整体思路为 1.链表为空 void SLPushBack(SLTNode** pphead, SLTDataType x) {SLTNode* newnode BuyLTNode(x); …

AI:149-法律电子邮件图像中的欺诈检测与敲诈勒索追踪—深度学习技术

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

【开源】SpringBoot框架开发二手车交易系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块2.3 车辆预约管理模块2.4 车辆预定管理模块2.5 车辆留言板管理模块2.6 车辆资讯管理模块 三、系统设计3.1 E-R图设计3.2 可行性分析3.2.1 技术可行性分析3.2.2 操作可行性3.2.3 经济…