前端如何防止用户输入的脚本被直接执行? シ佳妮 提问于 2026-03-30 18:09:14 阅读 2 前端 我在做一个评论功能,用户提交的内容会直接显示在页面上。但测试时发现如果输入 alert(1),居然真的弹窗了!这不就XSS了吗? 我试过用 innerText 代替 innerHTML,但这样连正常的换行和格式都没了。有没有既能保留基本格式又安全的做法?比如只允许 br、p 这些标签? 现在后端是直接存原始字符串,前端渲染时用的是 Vue 的 v-html,是不是这里出问题了?求指点安全又实用的方案。 XSS攻击前端安全 我来解答 赞 1 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 司徒树潼 Lv1 这确实是典型的XSS问题。首先得明确一点,v-html确实容易引发安全问题,因为它是直接解析HTML的。具体来说,你需要做两件事:输入过滤和输出编码。 先说输入过滤吧。在后端就要对用户输入进行处理,只允许特定标签通过。比如用一个白名单机制,我给你写个简单的示例: function sanitizeInput(input) { // 使用正则表达式简单过滤 const regex = /<[^>]*script[^>]*>/gi; return input.replace(regex, ''); } 不过这还不够全面,建议用成熟的库比如 DOMPurify。它能更细致地控制哪些标签和属性可以通过。 然后是输出编码。Vue本身不会自动帮你转义HTML,所以要用专门的插件或者自己实现一个转义函数。比如说这样: function htmlEscape(str) { return str.replace(/[&<>"']/g, function(match) { switch (match) { case '&': return '&'; case '<': return '<'; case '>': return '>'; case '"': return '"'; case "'": return '''; } }); } 对于保留格式的需求,可以在过滤后的文本中手动添加 标签来换行。不要指望浏览器自动识别原始文本的格式,毕竟安全性更重要。 最后再吐槽一下,前端安全真是个坑啊,光防XSS就得考虑这么多细节。但没办法,用户数据就是这么不靠谱,我们只能尽量堵住漏洞。 回复 点赞 2026-03-30 18:11 加载更多 相关推荐 2 回答 52 浏览 用户输入渲染到HTML时如何防止XSS攻击?我的表单代码可能有漏洞 我在做一个表单,用户输入的内容会直接显示在页面上,但测试时发现可以注入脚本。比如用户输入alert(1)就会执行。现在用handleInput处理输入,但不知道该怎么安全转义: <div>... 极客凌熙 安全 2026-02-03 19:19:29 1 回答 27 浏览 前端如何在Vue项目中安全地处理用户输入以防止XSS攻击? 我在做DevSecOps集成时,安全扫描工具报了一个高危XSS漏洞,说用户输入直接渲染到页面上了。我试过用v-text,但有些地方必须用v-html展示富文本,结果就被扫出问题了。 比如下面这段代码,... 长孙艳杰 安全 2026-03-24 10:12:22 2 回答 16 浏览 前端渲染用户输入时如何防止 XSS 攻击? 我在做一个评论功能,用户提交的内容直接用 innerHTML 插到页面上,结果发现如果用户输入带 script 标签的内容,会被执行!这明显有 XSS 风险。我试过用 DOMPurify,但项目不允许... 东方雨橙 前端 2026-03-13 10:25:21 1 回答 4 浏览 前端安全测试中如何防止XSS攻击? 我在做安全测试时发现,用户输入的内容直接渲染到页面上可能会被注入脚本。比如下面这个React组件,虽然用了 dangerouslySetInnerHTML,但不确定怎么安全地处理用户输入。 const... 小利娟 安全 2026-03-30 09:10:15 1 回答 28 浏览 前端如何正确处理用户输入防止XSS攻击? 我在做一个评论功能,用户提交的内容要显示在页面上,但担心XSS漏洞。比如用户输入了alert(1),直接innerHTML就会执行,这太危险了。 我试过用DOMPurify库清理,但有些场景又需要保留... UI美含 安全 2026-03-15 15:26:19 2 回答 20 浏览 如何防止用户输入中的单引号导致SQL注入漏洞? 我在开发登录页面时发现,当用户输入类似' OR 1=1--的恶意用户名时,后端查询直接返回了所有用户数据。虽然我在前端用了正则过滤了单引号:username.replace(/'/g, ''),但测试... UX-豫豪 前端 2026-02-15 09:34:41 2 回答 178 浏览 Vue里用innerHTML显示用户评论内容,怎么防止XSS攻击啊? 我在做一个论坛帖子的评论展示功能,用v-html渲染用户提交的内容,但测试时发现能直接执行脚本标签。比如用户输入alert(1),页面真的会弹窗。试过用转义函数替换尖括号,但图片和链接标签也失效了,怎... 书生シ竞兮 安全 2026-02-01 14:29:42 2 回答 56 浏览 前端鉴权时,如何防止他人伪造用户权限标识? 我现在在做项目权限控制,用JWT存了用户角色信息。前端通过请求头携带权限标识,但发现直接存字符串太容易被篡改了。试过用加密和签名,但别人拿到token后还是能解密出权限字段随意修改。 比如用户本应该是... Designer°若溪 安全 2026-01-26 18:34:26 1 回答 24 浏览 前端展示用户数据时如何做假名化处理? 我们系统要在前端展示用户列表,但不能直接显示真实姓名,得用假名。我试过在接口返回后手动替换名字,但感觉不太安全,而且分页加载时容易漏掉。 比如现在这段 HTML 是从后端拿的数据直接渲染的: <... 娜娜 Dev 安全 2026-03-25 10:35:19 1 回答 18 浏览 用户输入内容渲染到页面时如何防止XSS攻击? 我在做一个评论功能,用户提交的内容会直接用 innerHTML 插入到页面上。虽然我知道可以用 DOMPurify 这类库来过滤,但想先自己试试简单处理。比如把 < 转成 < 之类... 设计师姿言 前端 2026-03-24 23:19:18
先说输入过滤吧。在后端就要对用户输入进行处理,只允许特定标签通过。比如用一个白名单机制,我给你写个简单的示例:
不过这还不够全面,建议用成熟的库比如 DOMPurify。它能更细致地控制哪些标签和属性可以通过。
然后是输出编码。Vue本身不会自动帮你转义HTML,所以要用专门的插件或者自己实现一个转义函数。比如说这样:
对于保留格式的需求,可以在过滤后的文本中手动添加
标签来换行。不要指望浏览器自动识别原始文本的格式,毕竟安全性更重要。
最后再吐槽一下,前端安全真是个坑啊,光防XSS就得考虑这么多细节。但没办法,用户数据就是这么不靠谱,我们只能尽量堵住漏洞。