前端如何安全地处理用户输入避免XSS攻击? 丽萍(打工版) 提问于 2026-03-05 21:53:18 阅读 60 安全 我在做一个评论功能,用户提交的内容直接用 innerHTML 插入到页面,结果被安全扫描工具报了 XSS 风险。我试过用 DOMPurify,但不确定是不是用对了,比如下面这样写安全吗? const clean = DOMPurify.sanitize(userInput); commentDiv.innerHTML = clean; 有没有更稳妥的做法?或者我是不是漏掉了什么配置? 安全开发生命周期安全编码 我来解答 赞 6 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 UP主~春艳 Lv1 你那么用 DOMPurify 是没问题的,默认配置就能过滤掉 script、iframe 这些危险标签。但说实话,既然能避免 innerHTML,我建议你换个思路。 最安全的做法是根本不用 innerHTML。用户的评论内容说白了就是纯文本,你用 textContent 插进去,浏览器根本不会解析任何 HTML 标签,XSS 攻击直接失效: commentDiv.textContent = userInput; 这比任何清理库都靠谱,零依赖、零配置、性能最好。 如果你确实需要支持一些富文本格式(比如加粗、链接),那 DOMPurify 确实是目前最稳的选择,你那么写没问题。可以考虑加上配置更安心一点: const clean = DOMPurify.sanitize(userInput, { ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'a', 'p', 'br'], ALLOWED_ATTR: ['href', 'target'], ALLOW_DATA_ATTR: false }); 把允许的标签和属性限定死,攻击面就小很多。a 标签的 href 记得验证一下是不是以 http 开头,防止 javascript: 协议。 总结一下优先级:能用 textContent 就用 textContent,必须用 innerHTML 的时候 DOMPurify 配上加限定的白名单,没了。 回复 点赞 2026-03-19 17:07 长孙俊浩 Lv1 DOMPurify是个不错的选择,但你这么用确实有点简单粗暴了。在WordPress里我们通常这么搞: 1. 主题里加个wp_kses过滤更保险,WordPress自带这个XSS防御神器: $clean_content = wp_kses_post($user_input); echo $clean_content; 2. 如果非要前端处理,DOMPurify得这么配才安全: const clean = DOMPurify.sanitize(userInput, { ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'a'], ALLOWED_ATTR: ['href', 'title'] }); commentDiv.innerHTML = clean; 3. 最稳妥的还是前后端双重过滤,后端用wp_kses,前端再用DOMPurify。我们项目都这么干,安全扫描从来没报过警。 另外记得设置CSP头,虽然WordPress默认会帮你处理一部分。要我说啊,做评论功能就得像防贼一样防XSS,这年头搞破坏的太多了。 回复 点赞 1 2026-03-05 22:00 加载更多 相关推荐 1 回答 41 浏览 前端如何在Vue项目中安全地处理用户输入以防止XSS攻击? 我在做DevSecOps集成时,安全扫描工具报了一个高危XSS漏洞,说用户输入直接渲染到页面上了。我试过用v-text,但有些地方必须用v-html展示富文本,结果就被扫出问题了。 比如下面这段代码,... 长孙艳杰 安全 2026-03-24 10:12:22 1 回答 54 浏览 安全培训中如何避免React里的XSS漏洞? 最近公司搞安全开发生命周期培训,提到前端也要防XSS。我在用React写一个动态渲染用户输入内容的功能,但不确定这样写会不会有风险。 我试过直接用{userInput}插值,但听说dangerousl... UE丶沐希 安全 2026-03-17 19:19:18 2 回答 42 浏览 前端如何正确处理用户输入防止XSS攻击? 我在做一个评论功能,用户提交的内容要显示在页面上,但担心XSS漏洞。比如用户输入了alert(1),直接innerHTML就会执行,这太危险了。 我试过用DOMPurify库清理,但有些场景又需要保留... UI美含 安全 2026-03-15 15:26:19 1 回答 34 浏览 前端安全审计时如何防止XSS攻击? 最近在做项目的安全审计,发现有个地方可能有XSS漏洞。用户输入的内容直接插到页面里了,虽然用了innerText,但不确定是不是真的安全。 比如下面这段代码,把URL参数里的值直接显示出来,这样写会不... 巧云酱~ 前端 2026-03-17 16:11:15 2 回答 40 浏览 前端安全审计时如何防止XSS攻击? 最近在做项目的安全审计,发现用户输入的内容直接渲染到页面上,担心有XSS风险。比如下面这段代码,把用户昵称直接插进HTML里,会不会被注入脚本? <div class="user-info"&g... A. 清梅 前端 2026-03-10 06:20:21 2 回答 33 浏览 前端如何用安全沙箱防止XSS攻击? 最近在做一个富文本编辑器的功能,用户可以输入HTML内容,但我担心XSS问题。听说可以用沙箱隔离,比如把内容放到iframe里?我试过动态创建iframe然后写入内容,但样式全乱了,而且有些脚本还是能... UP主~静静 安全 2026-03-27 18:24:25 2 回答 32 浏览 前端输入过滤真能防XSS吗?我这样写安全吗? 我在React项目里做用户评论功能,担心XSS攻击,就对输入做了个简单过滤,但不确定这样够不够。比如把script标签替换成空字符串,但听说还有其他绕过方式? 下面是我现在的处理代码: const s... 开发者玉聪 安全 2026-03-25 11:41:19 2 回答 34 浏览 白盒测试时如何检测前端代码中的XSS漏洞? 我在做项目的安全自查,听说白盒测试要查XSS,但不太清楚具体该看哪些地方。比如用户输入的内容在页面上展示时,是不是只要用了innerHTML就有风险? 我试过用ESLint的security插件,但它... UI雯婧 安全 2026-03-23 19:25:20 2 回答 72 浏览 前端做XSS输入过滤到底该在哪儿处理? 我最近在用 Vue 写一个评论功能,用户输入的内容会直接渲染到页面上。我知道要防 XSS,但不确定是在输入时就过滤掉危险字符,还是在渲染时转义?试过在提交前用正则替换 script 标签,但好像还是能... Code°秀云 安全 2026-03-19 08:44:24 1 回答 46 浏览 Vue中如何安全处理URL参数防止XSS攻击? 我在用Vue做项目时,需要从URL里取参数显示在页面上,但担心XSS风险。比如用户传了个带script标签的参数,直接渲染会不会被攻击? 我试过用encodeURIComponent,但好像只是编码了... 欧阳忠娟 安全 2026-03-25 21:45:21
最安全的做法是根本不用 innerHTML。用户的评论内容说白了就是纯文本,你用 textContent 插进去,浏览器根本不会解析任何 HTML 标签,XSS 攻击直接失效:
这比任何清理库都靠谱,零依赖、零配置、性能最好。
如果你确实需要支持一些富文本格式(比如加粗、链接),那 DOMPurify 确实是目前最稳的选择,你那么写没问题。可以考虑加上配置更安心一点:
把允许的标签和属性限定死,攻击面就小很多。a 标签的 href 记得验证一下是不是以 http 开头,防止 javascript: 协议。
总结一下优先级:能用 textContent 就用 textContent,必须用 innerHTML 的时候 DOMPurify 配上加限定的白名单,没了。
1. 主题里加个wp_kses过滤更保险,WordPress自带这个XSS防御神器:
2. 如果非要前端处理,DOMPurify得这么配才安全:
3. 最稳妥的还是前后端双重过滤,后端用wp_kses,前端再用DOMPurify。我们项目都这么干,安全扫描从来没报过警。
另外记得设置CSP头,虽然WordPress默认会帮你处理一部分。要我说啊,做评论功能就得像防贼一样防XSS,这年头搞破坏的太多了。