CalcGuide · 技术博客主页 / 一页纸学习计划
🟠

OWASP Top 10 与注入类漏洞:识别、修复、测试

分类:安全与可靠性 · 路径:docs/topics/web-security-owasp-injection/README.md

#owasp#injection#xss#sql#xxe

从 OWASP Top 10 风险分类到 SQL/XSS/命令/NoSQL/LDAP/XXE 注入的代码层修复与安全测试

父主题

Web 安全:从 OWASP Top 10 到漏洞响应

子主题(0)

OWASP Top 10 与注入类漏洞:识别、修复、测试

0. 元信息

1. 学习路线

OWASP Top 10 2021 全 10 类概览
  → SQL 注入(UNION、Boolean、时间、堆叠)
  → NoSQL 注入(MongoDB operator)
  → 命令注入(OS 命令拼接)
  → LDAP 注入
  → XML 外部实体(XXE)
  → XSS:反射型、存储型、DOM 型
  → 模板注入(SSTI)与表达式注入
  → 上下文编码与净化(HTML、JS、URL、属性、CSS)
  → Content-Security-Policy 落地
  → 安全测试:单元 + 集成 + ZAP Baseline

2. 阶段周数分配

建议周期 8 周,每周 6 天、每天 1.5~2 小时(每周约 9~12 小时),第 7 天用于复盘和补测:第 1 周基础模型与威胁边界;第 2~3 周核心机制;第 4~5 周防御实现;第 6 周检测、测试与审计;第 7 周综合演练;第 8 周项目收尾、复盘与最终验收。

3. 九阶段表

阶段核心知识实践产出可观察学会标准
1. OWASP 框架Top 10 2021 全 10 类、ASVS、WSTG一份自评表,每类 1 行能复述每类的触发条件、影响、最小修复
2. SQL 注入UNION、Boolean、盲注、二阶 SQL修复 demo 中 SQL 注入 + 测试用参数化查询阻断所有 4 类 payload
3. NoSQL 注入MongoDB $ne / $gt / $where修复 NoSQL 注入强制 schema 校验;禁用 $where
4. 命令注入exec / spawn / shell 拼接修复命令注入execFile 参数化 + 白名单
5. LDAP / XPath 注入特殊字符过滤修复 LDAP 注入转义或参数化 LDAP 查询
6. XXE外部实体、SSRF、文件读取修复 XXE禁用外部实体;用安全的 XML parser
7. XSS 反射型URL 参数渲染未转义修复并加 CSPHTML 上下文编码 + CSP nonce
8. XSS 存储型DB 内容渲染到页修复存储型 XSS存储前净化;渲染前再编码
9. XSS DOM 型客户端 sink 接收不可信输入修复 DOM XSS禁用 innerHTML;用 DOMPurify + textContent

关键陷阱:上下文决定编码方式;净化器要按 sink 类型选;CSP 不替代输入校验;模板引擎默认是否安全要逐个查。

4. 第一周:基础与威胁建模(每天 1.5~2 小时)

Day任务产出自检
1从 §1 首个知识点画信任边界,列出 5 个资产和 5 个攻击面notes/day1.md,含资产/攻击面表test -s notes/day1.md && grep -c "攻击面" notes/day1.md 输出 ≥1
2阅读 §3 阶段 1,针对 3 个概念各写定义、前置条件和失败后果notes/day2.md,至少 3 个小节grep -c "失败" notes/day2.md 输出 ≥3
3用本地最小示例复现一个不安全行为,再写修复前后差异notes/day3.mdnotes/day3-output.txt`test -s notes/day3-output.txt && grep -E “before
4依据 §3 阶段 2 写一张请求/数据流时序图notes/day4.md,含 Mermaid 图grep -q "mermaid" notes/day4.md
5为 3 个边界条件设计测试,并执行命令记录结果notes/day5.md,含输入/期望/实际grep -c "期望" notes/day5.md 输出 ≥3
6将一条防御规则实现为可运行脚本或配置,并记录命令notes/day6.shnotes/day6.jsonnotes/day6.mdtest -s notes/day6.md && grep -q "运行" notes/day6.md
7回顾 Day 1~6,写 300 字复盘并列出 10 个自测问答notes/week1-retrospective.mdwc -w notes/week1-retrospective.md ≥300 且 grep -c "问:" ≥10

5. 阶段通用验收

6. 最终验收

学完后应能完成威胁建模、选择合适的安全机制、实现最小防御链路、编写负面测试、读取日志或扫描证据,并向团队解释安全权衡和残余风险。

量化标准:

7. 综合项目

首选项目:安全 Web 服务实验室(本主题对应的 “)。实现一个最小 HTTP/API 服务,故意保留一条可控弱点,再用安全实现和自动化测试修复它。

备选项目:安全审计 CLI。读取请求、配置或依赖清单,输出风险、证据、严重性和修复建议。

必做要求:

项目根目录必须包含 README.mdnotes/design.mdnotes/test.mdnotes/retrospective.md。README 需写需求说明、数据结构/工具选择理由、核心流程、模块化实现、边界测试、编译/运行说明、目录结构和复盘记录;notes/design.md 写威胁模型与流程图,notes/test.md 写每组输入/期望/实际输出,notes/retrospective.md 写用时、难点、收获和下一步。

本主题贡献

8. 推荐开源资料

阶段角色资料名链接用法
1入门OWASP Web Security Testing Guidehttps://owasp.org/www-project-web-security-testing-guide/按主题阅读测试方法并转成自己的检查项
2官方文档MDN Web Securityhttps://developer.mozilla.org/en-US/docs/Web/Security查阅浏览器安全机制、Cookie、CORS、CSP
3规范/标准OWASP Cheat Sheet Serieshttps://cheatsheetseries.owasp.org/实现前逐条对照防御清单
4工具/源码OWASP ZAPhttps://www.zaproxy.org/对本地项目做代理扫描,保存报告
5练习平台PortSwigger Web Security Academyhttps://portswigger.net/web-security完成对应实验并记录请求、漏洞和修复
6参考标准NIST Cybersecurity Frameworkhttps://www.nist.gov/cyberframework将检测、响应和恢复动作映射到流程

许可证提示:使用 OWASP、ZAP 或其他开源资料与源码前,先打开仓库或页面的 LICENSE/版权说明;默认只引用链接和思路,复制代码时保留版权与许可证文本。

默认使用顺序:先读 §1 与 OWASP 入门资料建立模型 → 用 MDN/规范查 API 和约束 → 在本地项目实现 → 用 ZAP 或对应扫描工具验证 → 到 PortSwigger 做练习 → 将证据和复盘写入 notes/

9. 学习资料汇聚(v0.3 自包含)

9.1 背景与动机

注入类漏洞(A03 Injection)在 OWASP Top 10 长期占据高位。它指的是:用户可控数据被当作代码或指令的一部分执行。形式多种多样,但根因都是同一句话——“把不可信输入当可信字符串拼进了解释器”

典型表现:

它之所以高频,是因为:

  1. 模板、ORM、框架默认不一定安全;
  2. 不同上下文(HTML/JS/URL/SQL)需要不同编码;
  3. 业务层常常”信任”了内部来源(数据库、配置文件、其他服务)。

OWASP Top 10 2021 把”注入”列为 A03。本计划把它和 Top 10 框架一起作为整个 Web 安全的入口。

9.2 概念地图

flowchart LR
  Top10[OWASP Top 10 2021]
  Top10 --> A01
  Top10 --> A02
  Top10 --> A03[A03 Injection]
  Top10 --> A04
  Top10 --> A05
  Top10 --> A06
  Top10 --> A07
  Top10 --> A08
  Top10 --> A09
  Top10 --> A10
  A03 --> SQL[SQL Injection]
  A03 --> NoSQL[NoSQL Injection]
  A03 --> Cmd[OS Command Injection]
  A03 --> LDAP[LDAP Injection]
  A03 --> XXE[XXE]
  A03 --> XSS[XSS]
  A03 --> SSTI[SSTI]
  A03 --> Header[Header Injection / CRLF]
  XSS --> Reflected[反射型]
  XSS --> Stored[存储型]
  XSS --> DOM[DOM 型]
  SQL --> Union[UNION]
  SQL --> Boolean[Boolean]
  SQL --> Time[时间盲注]
  SQL --> Stacked[堆叠]
  Fix[修复模式] --> ParamQ[参数化查询]
  Fix --> Encode[上下文编码]
  Fix --> Allow[白名单]
  Fix --> CSP[CSP nonce/hash]
  Fix --> Purify[DOMPurify]
  Test[安全测试] --> Unit[单测]
  Test --> ZAP[ZAP Baseline]
  Test --> Semgrep[Semgrep]

关系说明:Top 10 提供风险分类;注入类是其中 A03;每类注入有自己的 payload 与 sink;修复模式按 sink 选;安全测试覆盖每条修复。

9.3 基础知识讲解

9.3.1 经典论文 / 标准

资料角色评分链接
OWASP Top 10 2021 — A03 Injection风险分类与最小修复5https://owasp.org/Top10/A03_2021-Injection/
OWASP SQL Injection Prevention Cheat SheetSQL 注入修复5https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
OWASP XSS Prevention Cheat SheetXSS 修复(上下文编码规则)5https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
OWASP XXE Prevention Cheat SheetXXE 修复4https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
OWASP Command Injection Cheat Sheet命令注入修复4https://cheatsheetseries.owasp.org/cheatsheets/OS_Command_Injection_Defense_Cheat_Sheet.html
OWASP WSTG — Injection测试方法4https://owasp.org/www-project-web-security-testing-guide/v42/4-Web_Application_Security_Testing/07-Input_Validation_Testing/
CWE-89 SQL Injection漏洞本体4https://cwe.mitre.org/data/definitions/89.html
CWE-79 Cross-site Scripting漏洞本体4https://cwe.mitre.org/data/definitions/79.html

主推:OWASP SQL/XSS Cheat Sheet。备查:WSTG、CWE 条目、XXE/Command Cheat Sheet。

9.3.2 经典书籍

资料角色评分链接
The Web Application Hacker’s Handbook (Stuttard / Pinto)Web 漏洞方法学5https://www.wiley.com/en-us/The+Web+Application+Hacker%27s+Handbook
Hacking Exposed Web Applications攻击视角4https://www.mheducation.com/highered/product/hacking-exposed-web-applications-finchelstein-etal/
The Tangled Web (Michal Zalewski)浏览器与脚本安全5https://lcamtuf.coredump.cx/tangled/
Web Application Security (Andrew Hoffman)现代 XSS/SQL 实战4https://www.oreilly.com/library/view/web-application-security/9781492053101/

主推:Stuttard《Web Application Hacker’s Handbook》。备查:Zalewski《The Tangled Web》、Hoffman《Web Application Security》。

9.3.3 优秀博客 / 文档

资料角色评分链接
PortSwigger Web Security Academy互动漏洞实验5https://portswigger.net/web-security
OWASP Juice Shop故意留漏洞 Node demo5https://github.com/juice-shop/juice-shop
Mozilla MDN — XSS浏览器侧 XSS 解释4https://developer.mozilla.org/en-US/docs/Web/Security
DOMPurifyXSS 净化库5https://github.com/cure53/DOMPurify
sqlmapSQL 注入检测工具4https://github.com/sqlmapproject/sqlmap
OWASP ZAP开源扫描器5https://www.zaproxy.org/

主推:PortSwigger Academy + Juice Shop。备查:MDN XSS、DOMPurify、sqlmap。

9.3.4 核心人物

人物贡献关键出处
Michal Zalewski(p0)浏览器模糊测试、XSS 与 SOPlcamtuf.coredump.cx、The Tangled Web
Marcus “rfpixel” Hutchins漏洞研究、MalwareTechblog.malwaretech.com
Dafydd StuttardBurp Suite、Web App Hacker’s Handbookportswigger.net
Marcus PintoWeb App Hacker’s Handbook 共同作者portswigger.net
Mario HeiderichDOM XSS、Cure53、DOMPurify 维护者cure53.de
Stefano Di PaolaXSS、DOM 模型OWASP 演讲历史

主推:Zalewski、Stuttard。备查:Heiderich、Di Paola。

9.3.5 开发方法

方法适用关键点
Sink-driven找漏洞先找危险的 sink(innerHTML、SQL execute、shell exec、XML parse),再追到 source
Whitelist over blacklist修复用类型、长度、字符集白名单;黑名单永远漏
Context-aware encodingXSS 修复HTML 属性、JS 字符串、URL、HTML 内容用不同编码函数
Parameterized everythingSQL/NoSQL/LDAP用预编译语句;不要字符串拼
Safe XML parser configXXE禁用 DOCTYPE、外部实体、XInclude
Test the regression验证每次修复都加一个失败→通过的测试

9.4 经典问题与经典案例

#问题为什么重要最简答案或证据
1Heartbleed(2014)OpenSSL 心跳扩展泄露私钥升级 OpenSSL;重新签发证书;撤销旧证书
2Log4Shell(2021)Log4j JNDI 注入 RCE,CVSS 10.0升级 Log4j ≥ 2.17.1;禁用 JNDI lookup;WAF 临时规则
3XSS via JSONP跨域读取用户数据弃用 JSONP;改用 CORS + Authorization 头;CSP default-src 'self'
4Samy 蠕虫(2005)MySpace 上 XSS 蠕虫 24 小时百万用户HTML/JS 上下文编码 + CSP + DOMPurify
5SQL Slammer(2003)蠕虫式 SQL 注入,几十分钟感染 75k 主机参数化查询;最小权限 DB 用户
6二阶 SQL 注入第一次存储时无害,第二次读取拼接时触发即使存储也要编码/参数化;ORM 不替你保证
7XXE 读 /etc/passwdXML 默认启用外部实体禁用 DOCTYPE;用 lxml defusedxml
8命令注入到 RCEexec("ping " + host)参数化 execFile;白名单 host
9DOM XSS via hashlocation.hash 拼到 innerHTML用 textContent 或 DOMPurify + scripting 配置
10Template Injection(SSTI){{constructor.constructor('return process')()}}不让用户输入进模板;用白名单变量

9.5 学习难点

概念难点

难点为什么会卡突破路径
OWASP 是分类不是清单看 Top 10 觉得空每类至少跑一个真实漏洞;CWE 编号关联
上下文编码选错HTML 内容用 JS 编码,导致 <img onerror=> 逃逸用 OWASP XSS Cheat Sheet 的 Rule #1~#7
CSP nonce 一加就 breakinline script 没 nonce给所有 inline script 加 nonce;考虑迁移到外链

思维难点

难点为什么会卡突破路径
“ORM 已经防 SQL 注入了”ORM 拼接字符串绕过看生成的 SQL;不传字符串到 raw query
修复 XSS 但绕过还在replace("<", "") 仍可被 <img src=x onerror=> 绕过用 DOMPurify 而非自写黑名单
“内部来源可信”服务间调用也算外部输入画信任边界;每个边界都校验

工程难点

难点为什么会卡突破路径
全量改字符串拼接历史代码太多用 Semgrep 扫出所有拼接模式,分批改
CSP 一加前端挂inline script 满天飞分阶段:default-src 'self' → 报告模式 → nonce/hash
测试只覆盖 happy path没跑过恶意 payload把 OWASP WSTG payload 表转成测试夹具

9.6 技术标准与接口

9.6.1 Entity

名称版本组织状态许可证
OWASP Top 102021OWASP现行CC BY-SA 4.0
OWASP ASVS4.0.3OWASP现行CC BY-SA 4.0
CSP Level 3CRW3C现行公开
CWE Top 252023MITRE / SANS现行公开
DOMPurify3.xCure53活跃Apache-2.0 / MPL-2.0
OWASP ZAP2.15+OWASP活跃Apache-2.0

9.6.2 Scope

9.6.3 Structure

必会字段、接口、API:

9.6.4 Ecosystem

9.6.5 Depth Tiers

层级能力
L0知道 OWASP Top 10、SQL/XSS 是什么
L1看懂一段含 CSP/参数化查询的代码
L2能为新功能添加参数化查询、CSP、净化库
L3能解释每类注入的 payload 变种、绕过得失,并能写对应测试
L4能设计企业级注入防御规范、S-SDLC 与红蓝对抗

本计划目标:L3

9.6.6 Source

10. 常见误区

11. 所有知识点分类(统一规则)

  1. 编程语言
  2. 数据结构与算法
  3. 计算机基础
  4. 工程技术
  5. Web 与后端
  6. 前端与客户端
  7. 数据与人工智能
  8. 项目与职业能力
  9. 安全与可靠性

本计划归属:安全与可靠性 主 + Web 与后端 辅。


直接依赖(0)

查看知识图谱