• v-html有什么问题


    使用 v-html 指令可以将一个字符串作为 HTML 动态渲染到 Vue 模板中的某个元素上。虽然 v-html 提供了将动态 HTML 插入到模板的便利性,但过度使用 v-html 可能导致一些问题:

    1. 安全性问题:使用 v-html 可能存在安全风险,特别是当插入的 HTML 内容来自用户输入或未经可靠验证的来源时。恶意用户可能会注入恶意代码或引发跨站脚本攻击(XSS)等攻击,从而危害到用户的浏览器和数据安全。因此,应该避免直接将不受信任的内容通过 v-html 渲染到模板中。

    2. 可读性降低:使用 v-html 会导致模板的可读性下降,因为模板中的逻辑和结构被部分放在了字符串中,难以直观地理解和维护。特别是当 HTML 内容比较复杂或包含大量动态代码时,代码的可读性将进一步降低。

    3. 性能问题:由于 v-html 会动态生成 HTML 内容,浏览器需要对该内容进行解析和渲染,这可能会导致性能问题。相比于直接使用 Vue 的模板语法和组件来渲染内容,使用 v-html 可能会引起不必要的重渲染、布局回流等性能损耗。

    综上所述,尽管 v-html 提供了方便的功能,但在使用时需要注意安全性和潜在的性能问题。应该尽量减少使用 v-html,并避免将不受信任的内容直接渲染到模板中,以确保代码的安全和可维护性。

    可能会导致 xss 攻击
    v-html 会替换掉标签内部的子元素

    let template = require('vue-template-compiler'); 
    let r = template.compile(`
    `
    ) // with(this){return _c('div',{domProps: {"innerHTML":_s('hello')}})} console.log(r.render); // _c 定义在core/instance/render.js // _s 定义在core/instance/render-helpers/index,js if (key === 'textContent' || key === 'innerHTML') { if (vnode.children) vnode.children.length = 0 if (cur === oldProps[key]) continue // #6601 work around Chrome version <= 55 bug where single textNode // replaced by innerHTML/textContent retains its parentNode property if (elm.childNodes.length === 1) { elm.removeChild(elm.childNodes[0]) } }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    SpringCloud无介绍快使用,nacos配置中心的基本使用(十九)
    CycloneNTT:需要更少内存的butterfly FFT方案
    洛谷刷题笔记——P4588 [TJOI2018]数学计算
    架构篇(六)可复用架构
    CentOS(4)——关于Linux软件下载时:amd64、x86、x86_64、arm64 的说明
    C++:引用
    【前端】JavaScript基础(二)
    【服务器数据恢复】EXT3文件系统下raid数据恢复案例
    SaaSBase:艺赛旗iS-RPA是什么?
    集合工具类---Collections
  • 原文地址:https://blog.csdn.net/formylovetm/article/details/136257168