如何防止Vue中通过URL参数引发的反射型XSS? 远香(打工版) 提问于 2026-03-13 10:28:17 阅读 5 安全 我最近在做一个搜索功能,URL里会带 keyword 参数,然后直接显示在页面上。但安全扫描说有反射型XSS风险,我试过用 v-html 但好像更危险了…… 现在代码是这样的: <template> <div> 您搜索的是:{{ $route.query.keyword }} </div> </template> 这样写真的会被XSS攻击吗?如果用户传了个 <script> 标签进来会执行吗?该怎么安全地展示这个参数? 我来解答 赞 2 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 公孙梓晴 Lv1 先说结论:你现在这样写 {{ $route.query.keyword }} 其实反而是安全的。 Vue的模板插值默认会对HTML进行转义,用户传 进来,页面上会直接显示这串文本,不会被执行。所以你完全没必要用 v-html,用了 v-html 才真的完蛋。 但为什么扫描器还报反射型XSS?这里有个点要注意:Vue的转义是针对模板渲染阶段的,如果你后面通过某些方式(比如某个第三方组件、或者你自己用了 innerHTML)绕过了Vue的转义,那就有问题了。 更稳妥的做法是自己在显示前先转义一遍,别全靠框架: // 简单的转义函数 function escapeHtml(str) { const div = document.createElement('div') div.textContent = str return div.innerHTML } 然后模板里这样用: <template> <div> 您搜索的是:{{ escapeHtml($route.query.keyword) }} </div> </template> <script> export default { methods: { escapeHtml(str) { const div = document.createElement('div') div.textContent = str return div.innerHTML } } } </script> 另外,keyword 从 URL 取出来默认是字符串,如果你之前对它做过 decodeURIComponent 或者其他处理,也要确保处理顺序是对的,先转义再拼接。 还有就是可以在服务端加 CSP 响应头,多重防护嘛。 回复 点赞 2026-03-13 11:05 加载更多 相关推荐 1 回答 32 浏览 Data URL 在 Vue 中如何安全地用于图片 src 防 XSS? 我在 Vue 项目里用用户上传的 base64 图片直接赋值给 img 的 src,担心会有 XSS 风险。比如下面这样写: <template> <img :src="userPr... 丽珍 安全 2026-02-23 23:05:18 2 回答 35 浏览 前端如何验证URL参数防止XSS注入? 我在开发用户资料页面时遇到问题,用户通过URL参数传递nickName,但发现有人传入<script>alert(1)</script>导致页面被注入。我试过用正则匹配过滤标签... 宇文翌萌 安全 2026-02-18 11:45:29 1 回答 25 浏览 前端如何安全处理URL参数防止XSS攻击? 我在做一个单页应用,需要从URL的查询参数里读取用户ID然后显示在页面上。之前直接用了new URLSearchParams(window.location.search).get('id')拿到值就... 欧阳司翰 安全 2026-03-07 18:55:19 1 回答 20 浏览 React组件直接渲染URL参数时如何防范DOM型XSS攻击? 我在做搜索功能时遇到个问题,用户输入的搜索词会通过URL参数保存,然后用React组件显示出来。但测试时发现如果在地址栏输入类似search?query=<script>alert(1)&... 迷人的翌萌 安全 2026-02-19 12:18:28 2 回答 38 浏览 Vue路由权限验证时如何阻止直接输入URL访问? 最近在做Vue项目权限控制,给路由加了meta配置和导航守卫,但发现当用户直接输入受保护页面的URL时,页面还是会先闪现一下再跳转到登录页。这是怎么回事啊? 代码是这样写的: const routes... Mr.怡辰 安全 2026-02-13 20:42:29 2 回答 65 浏览 URL参数过滤时如何防止XSS攻击绕过? 我在做用户分享链接功能时发现,用户输入的URL参数如果包含alert(1)会被正确拦截,但换成大写或者加注释就能绕过了,该怎么改进过滤逻辑呢? 尝试过用正则/<script>/i匹配标签,... 夏侯艳艳 安全 2026-02-07 04:31:25 1 回答 38 浏览 React中如何防止使用window.location.search导致的DOM型XSS? 我在React组件里用URL参数显示用户输入,发现这样写可能有XSS漏洞: function SearchResults() { const searchParam = new URLSearchPa... 东方爱菊 安全 2026-01-31 08:19:29 1 回答 10 浏览 Vue项目接入SSO后如何正确跳转并获取用户信息? 我们公司最近在搞统一认证,前端用 Vue 接入了公司的 SSO 系统。登录成功后会重定向回我的应用,URL 带了个 token 参数,但我发现有时候拿不到用户信息,或者页面刷新后状态就丢了。我现在的做... 端木路喧 安全 2026-03-08 15:42:25 2 回答 41 浏览 Vue中使用v-html时如何避免XSS漏洞? 在Vue项目里用v-html渲染用户输入的内容时,发现输入的alert(1)居然真的弹窗了。我试过用replace替换尖括号,但复杂HTML结构就乱了,怎么安全地处理用户输入避免XSS? <te... UX-自娴 安全 2026-02-16 20:52:29 2 回答 62 浏览 Postman环境变量在Vue项目中无法正确替换参数怎么办? 我在用Postman测试Vue项目的API时遇到奇怪的问题,定义的环境变量{{userId}}在请求URL里没被替换,直接返回404了。 按照教程设置了环境变量和全局变量,但在发送请求时地址栏还是显示... UX-翌萱 工具 2026-02-09 12:24:37
{{ $route.query.keyword }}其实反而是安全的。Vue的模板插值默认会对HTML进行转义,用户传
进来,页面上会直接显示这串文本,不会被执行。所以你完全没必要用 v-html,用了 v-html 才真的完蛋。但为什么扫描器还报反射型XSS?这里有个点要注意:Vue的转义是针对模板渲染阶段的,如果你后面通过某些方式(比如某个第三方组件、或者你自己用了 innerHTML)绕过了Vue的转义,那就有问题了。
更稳妥的做法是自己在显示前先转义一遍,别全靠框架:
然后模板里这样用:
另外,keyword 从 URL 取出来默认是字符串,如果你之前对它做过 decodeURIComponent 或者其他处理,也要确保处理顺序是对的,先转义再拼接。
还有就是可以在服务端加 CSP 响应头,多重防护嘛。