v-html可能导致的问题

Vue中的v-html指令用以更新元素的innerHTML,其内容按普通HTML插入,不会作为Vue模板进行编译,如果试图使用v-html组合模板,可以重新考虑是否通过使用组件来替代。

描述

易导致XSS攻击

v-html指令最终调用的是innerHTML方法将指令的value插入到对应的元素里,这就是容易造成xss攻击漏洞的原因了。Vue在官网对于此也给出了温馨提示,在网站上动态渲染任意HTML是非常危险的,因为容易导致XSS攻击,只在可信内容上使用v-html,永不用在用户提交的内容上。
关于XSS,跨站脚本攻击XSS,是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。当动态页面中插入的内容含有这些特殊字符如<时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。

  • 反射型XSS: 攻击者事先制作好攻击链接,需要欺骗用户自己去点击链接才能触发XSS代码,所谓反射型XSS就是将恶意用户输入的js脚本,反射到浏览器执行。
  • 存储型XSS:代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie,也被称为持久型XSS
  • DOMXSS:类似于反射型XSS,但这种XSS攻击的实现是通过对DOM树的修改而实现的。
// 直接将输入打印到页面,造成XSS // 反射型示例
<?php
$XssReflex = $_GET['i'];
echo $XssReflex;
<!-- 构造url,点击后就可以执行js代码 -->
http://127.0.0.1/xss.php?i=<script>alert("run javascript");</script>

不作为模板编译

v-html更新的是直接使用元素的innerHTML方法,内容按普通HTML插入,不会作为Vue模板进行编译,如果试图使用v-html组合模板,可以重新考虑是否通过使用组件来替代。另外后端返回<script>标签中的代码是不会直接执行的,这是浏览器的策略,如果需要的话可以在$nextTick回调中动态创建<script>标签然后src引入代码url即可。

scoped样式不能应用

在单文件组件里,scoped的样式不会应用在v-html内部,因为那部分HTML没有被Vue的模板编译器处理,如果你希望针对v-html的内容设置带作用域的CSS,你可以替换为CSS Modules或用一个额外的全局<style>元素手动设置类似BEM的作用域策略。此外提一下关于样式隔离的话,Shadow DOM也是个不错的解决方案。关于CSS Modules以及BEM命名规范可以参考下面的链接。

https://zhuanlan.zhihu.com/p/72631379
https://vue-loader.vuejs.org/zh/guide/css-modules.html
https://www.ruanyifeng.com/blog/2016/06/css_modules.html

每日一题

https://github.com/WindrunnerMax/EveryDay

参考

https://cn.vuejs.org/v2/api/#v-html
https://zhuanlan.zhihu.com/p/72631379
https://juejin.cn/post/6844903918518927367
https://www.cnblogs.com/ming1025/p/13091253.html
https://www.ruanyifeng.com/blog/2017/04/css_in_js.html
https://vue-loader.vuejs.org/zh/guide/css-modules.html
https://www.ruanyifeng.com/blog/2016/06/css_modules.html

v-html可能导致的问题相关推荐

  1. 0x52. 动态规划 - 背包(习题详解 × 19)

    目录 0x52. 动态规划 - 背包 0x52.1 0/10/10/1 背包 Problem A. 数字组合 Problem B. 背包问题求具体方案 Problem C. jury Compromi ...

  2. 卡住无法查看到所有进程_进程同步 进程互斥 软件和硬件实现方式 信号量机制 信号量机制实现进程同步,进程互斥,前驱关系...

    参考:https://www.bilibili.com/video/av31584226/?p=9 进程具有异步性的特征,异步性是指,各并发执行的进程以各自独立的,不可预知的速度向前推进. 回忆我们之 ...

  3. 一位产品总监打算这样管国家:首先得让大家交得起税。

    曾毅 是凤凰网的产品总监,也是产品极客,以下内容是曾毅的分析,也是一份非常有意思的社区型产品的管理思路. 我们倆经常拿各种产品,种用社会问题来锻炼自己解决问题的能力.上周跟他跟我阐述了一下他对国家管理 ...

  4. 面试再也不怕问到HashMap(一)

    文章目录 构造方法 tableSizeFor()计算容量 源码分析 1. hashmap的数据结构 1. hash() 2. resize() 3. putVal( ) 构造方法 HashMap有四个 ...

  5. java选填_java基础填空选择题

    Core Java试题 选择填空题:全部为多选题,只有全部正确才能得分. 1. 编译java程序的命令是__B_;运行java程序的命令是____A____;产生java文挡的命令是_____D___ ...

  6. 8 操作系统第二章 进程管理 信号量 PV操作 用信号量机制实现 进程互斥、同 步、前驱关系

    文章目录 1 信号量机制 1.1 整形信号量 1.2 记录形信号量 1.3 信号量机制小结 2 用信号量机制实现进程互斥.同 步.前驱关系 2.1 信号量机制实现进程互斥 2.2 信号量机制实现进程同 ...

  7. (操作系统题目题型总结)第三章:同步与互斥

    费翔林课本习题 思考题 1.试述顺序程序设计的特点以及采用顺序程序设计的优缺点 [答案] 特点: 执行的顺序性:一个程序在处理器上是严格按序执行的,每个操作必须在下一个操作开始前结束 环境的封闭性:运 ...

  8. 吴恩达深度学习 —— 2.8 计算图的导数计算

    上一节中,看了一个例子,使用流程图来计算函数J,现在我们清理一下流程图的描述,看看如何利用它计算出函数J的导数. 下图是一个流程图,假设要计算J对v的导数,怎么计算呢?把v值拿过来,改变一下,那么J的 ...

  9. HDOJ 4005-The war解题报告

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4005 题意是说,在一个无向带权图中可以在原来没有直接相连的两个点上加一条边,然后要求你删去一条边,要求得出 ...

  10. C++---vector剖析与模拟实现

    vector是定义于命名空间namespace std内的模板,头文件为#include< vector > vector介绍 vector表示可变大小的序列器 vector采用连续的空间 ...

最新文章

  1. 我要再接再力 学更多
  2. JavaScript 中对象的属性类型
  3. 在Qt中使用C++代码创建界面
  4. 二叉树的四种遍历方式(递归和非递归双重实现)
  5. 据调查95%以上的AI从业者不具备修改模型或者提出新模型的技术能力
  6. 高德智慧景区随身听播放器框架设计与实现
  7. Leet Code OJ 258. Add Digits [Difficulty: Easy]
  8. saltstack(三) --- salt-httpapi
  9. SQL Server遍历表(临时表)
  10. 重庆大学李婷婷计算机学院,北京大学青年研究中心赴我校考察调研
  11. 五子棋的禁手c++语言实现,C++实现简单五子棋游戏
  12. WAF和IPS的区别
  13. Linux串口驱动分析read
  14. 超级简单的纯js 象棋,看一遍你也会写
  15. 正确使用自旋锁、互斥锁
  16. 3D导航栏翻转(css)
  17. 寒江独钓:Windows内核安全编程(china-pub到货首发)
  18. UMLChina建模竞赛题大全-题目全文+分卷自测(10套100题)
  19. 新一代音视频架构在元宇宙场景的实践
  20. 2021年中国阴极铜产量及重点企业对比分析:江西铜业vs铜陵有色vs云南铜业[图]

热门文章

  1. springMVC从上传的Excel文件中读取数据
  2. Onvif开发之代码框架生成篇
  3. 图解TCP 的重传、滑动窗口、流量控制和拥塞控制机制
  4. 我们应该如何保护用户的密码
  5. Go 模块--开始使用Go Modules
  6. Javascript 面向对象中的构造函数和原型对象
  7. 突变检测软件 测试数据库,测序数据比对和变异检测
  8. 关于dubbo的几个问题
  9. 这些.Net的细节(面试秘笈),你都知道了吗?
  10. Java把科学计数法转换为字符串