XSS 是 Web 安全中最常见的一类漏洞之一,本质上是攻击者将恶意脚本注入页面,并在其他用户浏览时执行。
XSS 的常见类型
反射型 XSS
攻击载荷来自请求参数,服务器直接拼接后返回页面。
常见场景:
- 搜索框回显
- 报错信息展示
- URL 参数直接渲染
存储型 XSS
恶意脚本被写入数据库,后续用户访问页面时触发。
常见场景:
- 评论区
- 用户资料页
- 留言板
DOM 型 XSS
前端 JavaScript 直接读取用户可控数据并写入 DOM。
例如:
1 | <div id="out"></div> |
如果 URL 为:
1 | #<img src=1 onerror=alert(1)> |
页面就可能执行恶意脚本。
漏洞危害
- 窃取 Cookie 或 Token
- 冒充用户执行敏感操作
- 页面挂马
- 钓鱼跳转
- 获取后台管理权限
基础防护思路
输出时进行上下文编码
不同位置要采用不同的编码方式:
- HTML 内容编码
- HTML 属性编码
- JavaScript 字符串编码
- URL 编码
禁止直接拼接 innerHTML
优先使用:
textContentinnerText- 安全模板渲染
配置 CSP
合理的 CSP 可以降低 XSS 利用成功率,例如限制内联脚本和外部脚本来源。
对用户输入做过滤
过滤不是核心防线,但依然可以作为辅助手段,尤其适用于富文本内容。
一个基本结论
XSS 防护的关键不在于“黑名单拦截了多少 payload”,而在于是否从渲染上下文出发做了正确的输出编码。
后续我会继续整理 SQL 注入、文件上传、CSRF 等常见 Web 漏洞内容。