攻击html页面,v-html 的 XSS 攻击

本文讲解了Vue中v-html指令的使用方法,强调了其在输出HTML时的安全风险,特别是关于XSS攻击的预防,并给出了相关实例和安全建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 Vue 中有 v-html 这个便利的指令,可以让我们直接输出 HTML,但它有个缺点。

Vue 官网这样解释这个「指令」

双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html 指令:

Using mustaches: {{ rawHtml }}

Using v-html directive:

输出代码:

Using mustaches: This should be red.

Using v-html directive: This should be red.

这个 span 的内容将会被替换成为属性值 rawHtml,直接作为 HTML——会忽略解析属性值中的数据绑定。注意,你不能使用 v-html 来复合局部模板,因为 Vue 不是基于字符串的模板引擎。反之,对于用户界面 (UI),组件更适合作为可重用和可组合的基本单位。

你的站点上动态渲染的任意 HTML 可能会非常危险,因为它很容易导致 XSS 攻击。请只对可信内容使用 HTML 插值,绝不要对用户提供的内容使用插值。

什么是 XSS 攻击?

XSS是跨站脚本攻击(Cross-Site Scripting)的简称。

XSS是一种注入脚本式攻击,攻击者利用如提交表单、发布评论等方式将事先准备好的恶意脚本注入到那些良性可信的网站中。

当其他用户进入该网站后,脚本就在用户不知情的情况下偷偷地执行了,这样的脚本可能会窃取用户的信息、修改页面内容、或者伪造用户执行其他操作等等,后果不可估量。

发送到Web浏览器的恶意内容通常采用JavaScript代码片段的形式,但也可能包括HTML,Flash或浏览器可能执行的任何其他类型的代码。

简单模拟一个:

Welcome:

new Vue({el: '#app',data: {attack: '',}});

https://codepen.io/lynnic26/pen/XawoJq

注意事项:

尽量使用插值表达式 {{}},它会把要显示的内容转为字符串。

如果使用v-html,要保证来自服务端的渲染数据都是安全的。

在使用第三方UI组件库的的时候,要检查一下它们渲染页面的方式,是否使用了v-html

参考资料:

[1]https://cn.vuejs.org/v2/guide/syntax.html

[2]https://github.com/lynnic26/LynnNote/issues/1

[3]https://zhuanlan.zhihu.com/p/32237154

推荐阅读:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值