Appearance
网络安全
XSS(跨站脚本攻击) · CSRF(跨站请求伪造) · 防御策略
一、XSS(跨站脚本攻击)
本质:代码注入攻击,攻击者在目标网站注入恶意脚本在用户浏览器执行
三种类型:
| 类型 | 存储区 | 触发方式 |
|---|---|---|
| 存储型(持久性) | 后端数据库 | 无需用户手动触发,最危险 |
| 反射型(非持久性) | URL | 需用户点击恶意链接 |
| DOM 型 | URL/前端存储 | 前端 JS 取出恶意代码执行 |
防御:
- HttpOnly Cookie:JS 无法读取 Cookie
- 输入过滤:前后端都做输入格式校验
- HTML 转义:对
< > " ' & /等特殊字符转义 - 白名单过滤:富文本场景用白名单而非黑名单
- 纯前端渲染:用
.innerText/.setAttribute()代替.innerHTML - 避免危险 API:不使用
eval()、innerHTML、document.write()
二、CSRF(跨站请求伪造)
本质:利用浏览器自动携带 Cookie 的特性,冒充已登录用户发起请求
攻击流程:
- 用户登录网站 A,本地生成 Cookie
- 用户在不登出 A 的情况下访问恶意网站 B
- 网站 B 向网站 A 发起请求,浏览器自动携带 A 的 Cookie
- 网站 A 认为是合法用户操作,执行请求
CSRF vs XSS:
| XSS | CSRF | |
|---|---|---|
| 本质 | 代码注入问题 | HTTP 请求问题 |
| 攻击方式 | 注入恶意代码并执行 | 冒用用户身份发起请求 |
| 目标 | 窃取数据/注入内容 | 执行非预期操作 |
防御:
- Token 验证(最推荐):请求中携带随机 Token,服务端校验
- SameSite Cookie:限制 Cookie 只在同站请求中发送
- Referer/Origin 检查:校验请求来源域名
- 验证码:强制用户交互