前端如何在Vue项目中安全地处理用户输入以防止XSS攻击?
我在做DevSecOps集成时,安全扫描工具报了一个高危XSS漏洞,说用户输入直接渲染到页面上了。我试过用v-text,但有些地方必须用v-html展示富文本,结果就被扫出问题了。
比如下面这段代码,从接口拿到的内容要保留格式,但又怕被注入脚本,该怎么处理才安全?
<template>
<div>
<div v-html="userContent"></div>
</div>
</template>
<script>
export default {
data() {
return {
userContent: '<p>用户输入的<strong>内容</strong></p>'
}
}
}
</script>
首先,最安全的做法当然是尽量避免使用v-html。如果非要用,得对输入的内容进行严格的过滤和转义。这里可以借助一些库,比如DOMPurify,它专门用来净化HTML,移除潜在的危险代码。
你可以这样使用DOMPurify:
1. 安装DOMPurify:
2. 在你的组件里引入并使用:
然后模板里用
safeUserContent这个计算属性来代替userContent:这样做可以有效防止XSS攻击,虽然DOMPurify不是万能的,但在大多数情况下都能起到很好的防护作用。记得定期检查和更新DOMPurify库,以应对新的威胁。