v-html可能导致的问题
2021-06-28 10:23
597 查看
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
。 DOM
型XSS
:类似于反射型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
相关文章推荐
- HTML超链接地址中 &quot;&&quot; 符号可能导致的问题
- [置顶] Win8.1慎用360优化,可能导致安装驱动出现数据无效的问题。附解决方法
- 故障案例:mysql5.6下,mysqlbinlog版本不对可能导致的问题
- mysql serverid的理解和可能导致的复制问题
- CSS 控制Html页面高度导致抖动问题的原因
- 有关html5+调用百度地图接口导致坐标有偏差问题
- html中的超链接中比如有多层嵌套,就会导致字符串被截取,等等等等很多问题
- 这可能导致项目生成不正确。若要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Link.OutputFile) 中指定的值匹配。
- HTML中文编码导致的问题
- 浅谈自定义头文件可能导致的重定义问题
- (php的弱类型导致的小问题)某变量可能是数字或非数字(对象、字符串、json等)时,应该如何去判断
- 解决服务器缓存失效后可能导致的雪崩问题(thinkphp为例)
- CSS 控制Html页面高度导致抖动问题的原因
- CSS 控制Html页面高度导致抖动问题的原因
- 关于html中空格导致的排版问题
- html回车键导致form提交的问题
- C#中常量可能导致的版本更新问题!
- DOCTYPE导致MyEclipse无法正常格式化HTML的问题
- (php的弱类型导致的小问题)某变量可能是数字或非数字(对象、字符串、json等)时,应该如何去判断
- URL 中,查询字符串与HTML实体冲突,可能带来的问题.