Vue里用v-html渲染用户输入内容会有XSS风险吗?
我在做一个评论功能,后端返回的评论内容可能包含换行和简单格式,所以前端用 v-html 来渲染。但听说这样容易有 DOM-based XSS,到底该怎么处理?
比如下面这段代码,如果用户输入了 <script>alert(1)</script>,会不会直接执行?我已经试过用 DOMPurify 过滤,但不确定是不是必须的。
<template>
<div v-for="comment in comments" :key="comment.id">
<div v-html="comment.content"></div>
</div>
</template>
就真会弹窗。懒人方案:用 DOMPurify 过一遍再渲染,或者更懒点直接改用
{{ comment.content }}加 CSS 换行支持(white-space: pre-wrap),反正别用 v-html 处理用户输入。