Web安全入门:从 XSS 到基础防护

XSS 是 Web 安全中最常见的一类漏洞之一,本质上是攻击者将恶意脚本注入页面,并在其他用户浏览时执行。

XSS 的常见类型

反射型 XSS

攻击载荷来自请求参数,服务器直接拼接后返回页面。

常见场景:

  • 搜索框回显
  • 报错信息展示
  • URL 参数直接渲染

存储型 XSS

恶意脚本被写入数据库,后续用户访问页面时触发。

常见场景:

  • 评论区
  • 用户资料页
  • 留言板

DOM 型 XSS

前端 JavaScript 直接读取用户可控数据并写入 DOM。

例如:

1
2
3
4
5
<div id="out"></div>
<script>
const q = location.hash.slice(1);
document.getElementById("out").innerHTML = q;
</script>

如果 URL 为:

1
#<img src=1 onerror=alert(1)>

页面就可能执行恶意脚本。

漏洞危害

  • 窃取 Cookie 或 Token
  • 冒充用户执行敏感操作
  • 页面挂马
  • 钓鱼跳转
  • 获取后台管理权限

基础防护思路

输出时进行上下文编码

不同位置要采用不同的编码方式:

  • HTML 内容编码
  • HTML 属性编码
  • JavaScript 字符串编码
  • URL 编码

禁止直接拼接 innerHTML

优先使用:

  • textContent
  • innerText
  • 安全模板渲染

配置 CSP

合理的 CSP 可以降低 XSS 利用成功率,例如限制内联脚本和外部脚本来源。

对用户输入做过滤

过滤不是核心防线,但依然可以作为辅助手段,尤其适用于富文本内容。

一个基本结论

XSS 防护的关键不在于“黑名单拦截了多少 payload”,而在于是否从渲染上下文出发做了正确的输出编码。

后续我会继续整理 SQL 注入、文件上传、CSRF 等常见 Web 漏洞内容。