Vue项目做白盒安全测试时,如何避免模板注入风险?
我们团队最近在做Web安全的白盒测试,发现有个Vue组件直接把后端返回的HTML字符串用v-html渲染了,担心会有XSS漏洞。但业务又需要展示富文本,试过用DOMPurify清洗,但测试工具还是报“动态HTML插入”风险,这该怎么处理?
下面是那个组件的简化代码:
<template>
<div>
<div v-html="userContent"></div>
</div>
</template>
<script>
export default {
data() {
return {
userContent: this.$route.query.content // 来自URL参数
}
}
}
</script>
首先得承认 DOMPurify 是个不错的选择,但你得确保配置正确。建议在使用 DOMPurify 前先对内容做基本校验,比如检查是否包含恶意标签或属性。
这里有个简单方案:在获取数据后立即处理 userContent。记得把 script 标签和一些危险的事件属性都清理掉。下面是改进后的代码:
这样做能极大降低XSS风险,但记住没有绝对安全。还得结合后端做好输入验证。有时候真想骂街,明明前端只需要展示内容,却要操心这么多安全问题。不过为了项目安全,该做的防护还是要做足。
1. 先用DOMPurify清洗HTML
2. 再加个自定义指令做二次验证
完整代码这么写:
注意几点:
1. DOMPurify配置里严格限制允许的标签和属性,按你们业务需要调整
2. 别直接用v-html了,改用自定义指令
3. URL参数最好在后端也做过滤
测试工具还报的话可能是误报,只要确保DOMPurify配置足够严格就行。我之前项目就这么干的,安全扫描都过了。