为什么用了escape()后XSS过滤还是没效果? ♫子寨 提问于 2026-01-25 16:48:24 阅读 28 安全 最近在做用户评论功能,前端用escape()转义了输入内容,但测试时发现输入alert(1)依然能执行,这是怎么回事?我检查过代码确实调用了escape,但漏洞还是存在… 尝试过在服务端也做了过滤,但跨站脚本仍然能绕过。难道escape()不能防止XSS?有没有更可靠的前端转义方法? 安全开发生命周期安全编码 我来解答 赞 9 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 设计师子武 Lv1 escape()这个方法早就被废弃了,它确实不能完全防止XSS攻击。问题出在它只对部分字符做了转义,比如将空格转成%20,但对很多危险字符如<>"'这些却放过了,这就给了攻击者可乘之机。 我建议你换成更可靠的编码方式。如果是在浏览器环境,直接用textContent属性来设置文本内容是最安全的,它会自动处理所有特殊字符。比如: element.textContent = userInput; 实在需要手动转义的话,可以自己写个函数,把关键的几个字符都转掉: function escapeHtml(str) { return str.replace(/[<>"'&]/g, function(match) { const map = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }; return map[match]; }); } 这样更清晰,也更安全。不过记住,前端防护只是辅助,真正关键的是后端要做严格的校验和转义。别太依赖前端,毕竟请求是可以被篡改的。 回复 点赞 2026-02-18 20:09 诗雯 Dev Lv1 escape()真别用来防XSS,它只是个URL编码函数,根本挡不住脚本执行。你这个问题得用encodeURIComponent()或者直接在输出时用HTML实体转义,比如这样: function escapeHtml(unsafe) { return unsafe .replace(/&/g, "&") .replace(/ .replace(/>/g, ">") .replace(/"/g, """) .replace(/'/g, "'"); } console.log(escapeHtml("")); 前端只做第一步,服务端必须再严格过滤和验证,XSS不是单靠前端能搞定的。 回复 点赞 14 2026-01-30 09:03 加载更多 相关推荐 2 回答 19 浏览 CSS样式中的expression()如何绕过事件属性过滤导致XSS? 我在开发评论系统时发现,即使过滤了所有on开头的事件属性,用户提交的CSS代码还是能触发XSS。比如有人写了个这样的样式: div { width: expression(alert('XSS'));... 打工人尚勤 安全 2026-02-12 21:11:25 1 回答 13 浏览 设置了X-XSS-Protection头还是被Chrome提示XSS防护已禁用? 最近在配置安全头的时候发现了个怪事,明明在Express里设置了X-XSS-Protection: 1; mode=block,但Chrome控制台还是弹出“XSS 防护已禁用”的警告,这是怎么回事啊... 春萍酱~ 安全 2026-02-18 12:01:29 1 回答 14 浏览 Nessus扫描显示React组件存在XSS漏洞,但代码已经过滤输入了怎么办? 大家好,我在用Nessus扫描公司前端项目时,发现一个React组件被标记为XSS漏洞。但代码明明已经用了DOMPurify过滤输入,这是怎么回事? 我的代码是这样的: import DOMPurif... 设计师锦灏 安全 2026-02-10 12:07:31 2 回答 42 浏览 安全需求文档该怎么写才能防XSS漏洞? 我们在做用户评论功能时,测试发现XSS漏洞,但安全需求文档里只写了“过滤危险字符”,具体该怎么做才能有效防范呢? 之前尝试用正则表达式过滤了<script>标签和特殊字符,但测试人员用Un... UX-彩云 安全 2026-01-29 21:23:26 2 回答 34 浏览 设置了X-XSS-Protection后CSS样式被过滤导致页面错乱怎么办? 我在开发页面时启用了X-XSS-Protection: 1; mode=block头,但发现动态生成的用户提交内容里的CSS样式被过滤了。比如用户输入的标签带内联样式时,浏览器直接移除了style属性... 程序员亚美 安全 2026-01-29 16:50:32 1 回答 91 浏览 前端应急响应时如何快速定位XSS漏洞的攻击入口? 最近在处理一个紧急安全事件,发现有人利用表单提交功能注入了XSS脚本。我们用了OWASP ZAP扫描,但始终找不到具体漏洞点。前端代码里有个动态渲染的评论区,像这样: <div id="comm... 慕容昕彤 安全 2026-02-19 09:06:33 2 回答 18 浏览 React里设置了X-XSS-Protection头页面却变空白了? 最近在给React项目加固安全配置,按教程加了X-XSS-Protection头,结果页面直接变空白了。明明后端已经设置过响应头,为什么前端代码里再配置就会出问题? 我尝试在App.js里这样写: f... 司马卫红 安全 2026-02-12 23:55:23 1 回答 17 浏览 前端用JWT时,如何防止Token被XSS攻击窃取? 我在项目里用localStorage存JWT token,但同事说这样容易被XSS攻击,我试过把token加密存进去,但后端验证时解密失败了。现在改成用httpOnly的cookie,但axios发请... 百里国娟 前端 2026-02-09 16:08:30 2 回答 45 浏览 XSStrike扫描时参数注入失败,该怎么排查? 用XSStrike测试登录接口时,参数注入总是显示"未触发"。我按文档配置了--forms参数,但扫描完后报告里全是绿色勾勾,实际用Burp发包却能抓到XSS漏洞。 尝试过手动指定payload文件:... ___付敏 安全 2026-02-09 10:56:31 1 回答 25 浏览 设置了X-XSS-Protection头后页面样式全乱了怎么办? 我在HTML里加了,但页面布局突然错乱了,特别是用了Tailwind的组件。查文档说这个头是防御XSS的,但按示例配置后连开发工具都看不出样式错哪儿了。 <!DOCTYPE html> &... 打工人明昊 安全 2026-02-07 12:46:37
我建议你换成更可靠的编码方式。如果是在浏览器环境,直接用
textContent属性来设置文本内容是最安全的,它会自动处理所有特殊字符。比如:实在需要手动转义的话,可以自己写个函数,把关键的几个字符都转掉:
这样更清晰,也更安全。不过记住,前端防护只是辅助,真正关键的是后端要做严格的校验和转义。别太依赖前端,毕竟请求是可以被篡改的。
escape()真别用来防XSS,它只是个URL编码函数,根本挡不住脚本执行。你这个问题得用encodeURIComponent()或者直接在输出时用HTML实体转义,比如这样:前端只做第一步,服务端必须再严格过滤和验证,XSS不是单靠前端能搞定的。