1. 攻击篇
1.1. 跨站脚本攻击:Cross-Site Scripting(XSS)
-
主要利用了
- 盲目信任用户的提交内容
- string -> DOM
- document.write
- element.innerHTML = anyString
- SSR(user_data) // 伪代码
-
主要特点
- 通常难以从 UI 上感知(暗地执行脚本)
- 窃取用户信息(cookie/token)
- 绘制 UI(例如弹窗),诱骗用户点击/填写表单
-
分类
类别 | 特点 | 举例 |
---|---|---|
Stored XSS | 1. 恶意脚本被存在数据库中 2. 访问页面 -> 读数据 === 被攻击 3. 危害最大,对全部用户可见 | 某个视频网站存在XSS漏洞,某人上传一段视频,之中插入一段XSS恶意脚本,之后所有观看该视频的用户都会被XSS攻击 |
Reflected XSS | 1. 不涉及数据库 2. 从 URL 上攻击 | |
Dom-based XSS | 1. 不需要服务器的参与 2. 恶意攻击的发起+执行,全在浏览器完成 | |
Mutation-based XSS | 1. 利用了浏览器渲染 DOM 的特性(独特优化) 2. 不同浏览器,会有区别(按浏览器进行攻击) |
- Reflected XSS与Dom-based XSS完成注入脚本的地方:
1.2. 跨站伪造请求:Cross-site request forgery(CSRF)
- 特点
- 在用户不知情的前提下
- 利用用户权限(cookie)
- 构造指定HTTP请求,窃取或修改用户敏感信息
1.3. 注入:Injection
- SQL Injection
- 不止于SQL
- CLI
- OS command
- Server-Side Request Forgery(SSRF),服务端伪造请求,严格而言,SSRF 不是 injection,但是原理类似
1.4. 服务拒绝:Denial of Service(DoS)
-
特点
- 通过某种方式(构造特定请求),导致服务器资源被显著消耗来不及响应更多请求,导致请求挤压,进而雪崩效应
-
分类
类别 | 特点 | 举例 |
---|---|---|
ReDoS:基于正则表达式的 DoS | ||
Logical DoS | 1. 耗时的同步操作 2. 数据库写入 3. SQL join 4. 文件备份 5. 循环执行逻辑 | |
Distributed DoS(DDoS) | 短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求(不搞复杂的,量大就完事儿了) 1. 直接访IP 2. 任意API 3. 消耗大量带宽(耗尽) |
1.5. 中间人攻击
造成原因:
- 明文传输
- 信息篡改不可知
- 对方身份未验证
2. 防御篇
2.1. XSS 的防御
- 永远不信任用户的提交内容
- 不要将用户提交内容直接转换成DOM
- 现成工具
- 前端:
- 主流框架(React、Vue等)默认防御XSS
- google-closure-library
- 服务端(Node)
- DOMPurify
- 前端:
2.2. 防御 CSRF 的正确姿势
2.3. 防御 DoS
2.4. 防御 Injection
- 找到项目中查询 SQL 的地方
- 使用 prepared statement