xss漏洞最常出现在用户输入被直接插入html的位置,需警惕innerhtml、document.write等操作,优先用textcontent替代,必须插html时用dompurify净化,服务端输出做html实体编码,避免js拼接html字符串。

检查用户输入是否被直接插入HTML
这是XSS漏洞最常出现的位置。只要看到 innerHTML、document.write、$.html() 或模板字符串中拼接用户数据,就要立刻警惕。
常见错误现象:
- 搜索页回显关键词时未转义,输入
<script>alert(1)</script>直接弹窗 - URL参数如
?name=John<img>在页面中渲染后触发请求 - 富文本编辑器内容未经净化就用
innerHTML插入
实操建议:
- 优先用
textContent替代innerHTML;若必须插HTML,用 DOMPurify 等库净化 - 服务端输出时,对所有动态内容做 HTML 实体编码(如 PHP 用
htmlspecialchars($str, ENT_QUOTES, 'UTF-8')) - 避免在 JS 中拼接 HTML 字符串,改用
createElement+appendChild构建节点
验证HTML结构与标签使用是否规范
不规范的结构本身不直接导致漏洞,但会掩盖问题、干扰解析,甚至让安全策略失效(比如 CSP 规则因标签错位而未生效)。
常见错误现象:
-
<script></script>标签写在外或嵌套在<p></p>内,导致浏览器自动闭合、执行逻辑错乱 - 缺失
或 <code>lang属性,某些安全扫描工具直接跳过检测 - 使用已废弃属性如
onerror、onclick,绕过现代框架默认防护
实操建议:
- 用 W3C Markup Validation Service(validator.w3.org)校验语法,重点修复
Error级别问题 - 在 VS Code 中安装
HTMLHint插件,启用attr-no-duplication、tag-pair、attr-lowercase等规则 - 禁用所有内联事件处理器,统一用
addEventListener绑定行为
审查外部资源加载与CSP配置
CSP 是前端防 XSS 的最后一道防线,但配置错误等于没设。很多团队只加了 default-src 'self',却忘了 script、style、img 等具体指令的覆盖范围。
常见错误现象:
- 页面引入了不受信 CDN 的 JS,但 CSP 允许
script-src 'unsafe-inline' 'unsafe-eval' - 使用
<meta http-equiv="Content-Security-Policy">,但位置不在最前面,被浏览器忽略 - 开发环境用
http://localhost:3000调试,CSP 却没配localhost,导致功能异常又查不出原因
实操建议:
- 用
Content-Security-PolicyHTTP 响应头配置,比<meta>更可靠 - 逐项收紧:先设
script-src 'self',再按需添加可信域名,禁止'unsafe-inline'和'unsafe-eval' - 上线前用浏览器开发者工具的
Console面板查看 CSP violation 报告,确认无误报漏报
识别隐藏信息与注释泄露
HTML 注释、data- 属性、display:none 元素、class="hidden" 类名,经常被当成“前端内部备注”,结果把测试账号、API密钥、后端路径全暴露出去。
常见错误现象:
- 注释里写着
<!-- TODO: remove before prod, API_KEY=sk_live_abc123 --> <div data-env="dev" data-api="/api/v1/internal"> 在生产环境未清理<li>用 CSS 隐藏敏感表单字段(如 <code><input type="hidden" name="admin_token">),却被爬虫抓取- 构建流程中加入注释清理步骤(如用 html-minifier 的
--remove-comments) - 禁止在 HTML 中硬编码任何密钥、token、内部路径;改用环境变量注入或后端接口返回
- 检查所有
display:none、visibility:hidden、opacity:0元素,确认其内容不包含敏感信息
实操建议:
实际检查时最容易被忽略的是「动态生成的 HTML 片段」——比如通过 JS 拼出的 modal、tooltip、列表项,它们往往脱离模板系统,既没走服务端转义,也没被 CSP 覆盖,更不会出现在 HTMLHint 扫描范围内。这类代码必须单独拉出来人工 review 或加单元测试断言。











