Web 安全:从 OWASP Top 10 到漏洞响应
0. 元信息
- 主题路径:
docs/topics/web-security/README.md - 主分类:安全与可靠性
- 辅助分类:Web 与后端
- 适合对象:会写后端 API 和前端页面的开发者;目标是能识别、修复并防御 OWASP Top 10 类风险,建立依赖扫描与漏洞响应流程
- 建议周期:4~8 周(每周 8~10 小时,含编码、复盘与攻防练习)
- 前置知识:
network、rest-api-design;理解 HTTP、cookie、JWT、SQL 与模板渲染 - 最终目标:能对一个故意留漏洞的 Node/Express demo 做完整安全评估(OWASP Top 10 全项审查 + 修复 + 自动化测试覆盖),并能在公司内部建立 SBOM + 依赖扫描 + WAF 告警的纵深防御流水线
1. 学习路线
OWASP Top 10 与威胁建模
→ 注入类(SQL/XSS/NoSQL/命令/LDAP/XXE)
→ 认证与会话(密码、Session、JWT、OAuth 2.0、PKCE、MFA)
→ 访问控制(垂直/水平越权、IDOR、CORS、CSRF)
→ 敏感数据保护(KMS、密钥管理、字段级加密、日志脱敏)
→ 安全配置(CSP、HSTS、cookie Secure/SameSite、Referrer-Policy、X-Frame-Options)
→ 依赖与供应链(SBOM、npm audit、pip-audit、Cargo audit、签名验证)
→ 可观测与响应(WAF、IDS、日志告警、IR 流程、CVE 跟踪)
→ 威胁建模与红蓝对抗(STRIDE、攻击面分析、漏洞奖励计划)
按”识别 → 修复 → 防御 → 响应”的顺序学。每一步都要落到代码、配置或流程上,不停在概念。
2. 阶段周数分配
| 阶段 | 4 周方案 | 6 周方案 | 8 周方案 | 备注 |
|---|---|---|---|---|
| 1. OWASP 与威胁建模 | 0.5 | 0.5 | 1 | Top 10 概览 + STRIDE 入门 |
| 2. 注入类 | 1 | 1.5 | 2 | SQL/XSS/命令/NoSQL/LDAP/XXE |
| 3. 认证与会话 | 0.75 | 1 | 1.5 | 密码、Session、JWT、OAuth、PKCE、MFA |
| 4. 访问控制 | 0.5 | 1 | 1 | 垂直/水平、IDOR、CSRF、CORS |
| 5. 敏感数据保护 | 0.25 | 0.5 | 0.5 | KMS、密钥、字段级加密、日志脱敏 |
| 6. 安全配置 | 0.25 | 0.5 | 0.5 | CSP、HSTS、cookie、Referrer、X-Frame |
| 7. 依赖与供应链 | 0.25 | 0.5 | 0.5 | SBOM、audit、签名、容器扫描 |
| 8. 可观测与响应 | 0.25 | 0.25 | 0.5 | WAF、IDS、日志、IR、CVE 跟踪 |
| 9. 综合项目 | 0.25 | 0.25 | 0.5 | 完整安全评估 + 流水线 |
4 周方案要求每天 12 小时投入;6 周方案是常用节奏;8 周方案适合每天 1.5 小时。每周留 1 天做”修一个漏洞 + 写复盘”。
3. 九阶段表
| 阶段 | 核心知识 | 实践产出 | 可观察学会标准 |
|---|---|---|---|
| 1. OWASP Top 10 与威胁建模 | 2021 版十大类、STRIDE、攻击面 | 一份对示例应用的 Top 10 自评表 | 能说出每类的触发条件、影响和最小修复 |
| 2. 注入类 | SQL 注入、XSS(反射/存储/DOM)、命令注入、NoSQL、LDAP、XXE | 对故意留漏洞 demo 的 6 类注入修复 + 测试 | 用参数化查询、上下文编码、DOMPurify 等阻断攻击 |
| 3. 认证与会话 | 密码哈希(Argon2/bcrypt)、Session 固定、JWT 风险、OAuth 2.0 + PKCE、MFA | 改造 demo 的登录与会话 | 能解释 JWT 何时不能撤销;能写出 PKCE 流程 |
| 4. 访问控制 | 垂直/水平越权、IDOR、CORS、CSRF token、SameSite | 对象级授权矩阵 + CSRF 防护 | 每个对象访问都经过同一授权函数;CORS 不当 * |
| 5. 敏感数据保护 | KMS/HSM、密钥轮换、字段级加密、TLS、密码字段、日志脱敏 | 一份密钥管理 SOP + 日志脱敏过滤器 | 不在日志中写 token、密码、完整 PII |
| 6. 安全配置 | CSP(nonce、hash)、HSTS、cookie Secure/HttpOnly/SameSite、Referrer-Policy、X-Frame-Options、Permissions-Policy | 一份响应头基线 + 测试用例 | 能用 securityheaders.com 验证 A/A+ |
| 7. 依赖与供应链 | SBOM(SPDX/CycloneDX)、npm audit、pip-audit、Cargo audit、Snyk、Trivy、签名验证(sigstore/cosign) | SBOM 文件 + CI 扫描脚本 | 引入新依赖必查 CVE;锁定文件进 git |
| 8. 可观测与响应 | WAF 规则、IDS、SIEM、日志告警、IR playbook、CVE feed(NVD/GHSA) | 一份 IR playbook(按 OWASP IRT 模板) | 能在 30 分钟内定位漏洞组件 + 影响范围 |
| 9. 综合项目 | 端到端:评估 → 修复 → 测试 → 监控 | 漏洞评估报告 + 修复 PR + 流水线 | 第三方能复现每条修复与对应测试 |
关键陷阱:OWASP 是分类法不是清单;CVE 跟踪不止 npm;CSP 不能挡住所有 XSS;SameSite=Lax 不能取代 CSRF token;JWT 不是 session 的直接替代。
4. 第一周任务
Day 1 约定:本计划以 Node/Express + 故意留漏洞 demo(如 OWASP Juice Shop 或自建
vuln-app/)为实验对象。语言可换 Python/Go/Java,但 OWASP Top 10 与对应修复模式通用。统一使用 Node 22+、npm audit、ESLint +eslint-plugin-security、Jest +supertest写安全测试。
| 日 | 任务 | 当天交付 |
|---|---|---|
| Day 1 | 跑起一个故意留漏洞 demo(推荐 OWASP Juice Shop 或 OWASP/crAPI),浏览每一类漏洞 | 环境清单、demo 地址、运行命令 |
| Day 2 | 用浏览器 devtools + Burp Suite Community 拦截一次反射型 XSS 请求;标出触发点 | 截图 + 拦截日志 |
| Day 3 | 跑一次 SQL 注入:' OR '1'='1;用参数化查询修复;写一个 Jest 测试覆盖 | 修复前后代码对比 + 测试通过截图 |
| Day 4 | 用 OWASP ZAP 或 njsscan 自动扫一遍 demo,导出报告 | 报告 HTML/PDF + Top 10 命中项 |
| Day 5 | 跑 npm audit --omit=dev 与 pip-audit(如适用),记录高危 CVE 列表 | 一份漏洞清单(组件、版本、CVE、修复版本) |
| Day 6 | 在 demo 中加 CSP default-src 'self'、HSTS、cookie Secure/HttpOnly/SameSite=Strict;用 securityheaders.com 复测 | 响应头截图 + 评分 |
| Day 7 | 项目:在 demo 中至少修复 3 类漏洞(A01/A03/A07 各一),提交 PR,附测试 | 一份 PR 描述(含 OWASP 编号、复现、修复、验证) |
Day 7 拆解
步骤 A —— 最小可用(90 分钟)
- 选 A01(Broken Access Control)、A03(Injection)、A07(Identification and Authentication Failures)三类各 1 个漏洞;
- 每个漏洞:写一个失败的复现测试(
expect(res.status).toBe(401))→ 改代码 → 让测试通过; - 提交 3 个独立 commit,commit 信息含
[OWASP-A01]等标签。
步骤 B —— 补齐边界(45 分钟)
- 加
eslint-plugin-security进 CI; - 加
npm audit --audit-level=high进 CI; - 用
supertest补一组”非预期输入返回 400 而非 500”的回归。
进阶检查(非首次门槛):把整套 demo 推到 GitHub Actions,用 ZAP Baseline 跑一次完整扫描并把报告作为 PR artifact。
5. 阶段通用验收
- 不看答案独立画出 OWASP Top 10 分类表,每类至少 1 个真实漏洞案例;
- 用自己的话解释”为什么这条修复有效,绕过的可能性是什么”;
- 写一个失败的复现测试,再让修复让它通过——每个修复都对应至少 1 个测试;
- 测试正常、超长、特殊字符、空值、Unicode、并发共 6 类输入;
- 至少准备 3 组自定义 payload 并贴出实际响应;
- 记录漏洞的 CWE/CVE 编号、严重度评分(CVSS)与影响范围;
- 能修改已有应用加防护,而不是只能照抄 demo 的修复。
6. 最终验收
- 独立说出 OWASP Top 10 2021 全 10 类的触发条件、最简修复和绕过场景;
- 完成至少 30 个漏洞修复,覆盖 Top 10 全部类别,每类 ≥3 个;
- 完成 1 个综合项目(见 §7);
- 建立至少 1 个持续运行的扫描(
npm audit/pip-audit/ Trivy 任选其一),能展示 CVE 流入流出记录; - 能用 15 分钟讲清 OWASP Top 10 的演进逻辑,以及公司级安全响应的最小可行流程。
7. 综合项目
首选:对一个故意留漏洞的 Node/Express demo 做完整安全评估:OWASP Top 10 全项审查 + 修复 + 自动化测试覆盖。
必做要求:
- 目标:明确 demo(如 Juice Shop 或自建
vuln-app/); - 基线扫描:用 OWASP ZAP Baseline +
npm audit+eslint-plugin-security各跑一次,导出报告; - OWASP Top 10 全项审查:每类至少 1 个具体漏洞,给出位置、payload、影响;
- 修复:每个漏洞提交独立 commit,含测试;
- 回归:所有原安全测试仍通过,且性能回归 ≤10%;
- 响应头:CSP、HSTS、cookie Secure/HttpOnly/SameSite、Referrer-Policy、X-Frame-Options 全部到位;
- CI:把
npm audit --audit-level=high、eslint-plugin-security、ZAP Baseline 接进 GitHub Actions; - 文档:README 含漏洞分类、修复列表、已知限制、复盘记录。
备选:建立公司内部 SBOM + 依赖扫描 + WAF 告警的纵深防御流水线。覆盖:
- SBOM 生成(SPDX 或 CycloneDX)+ 入库;
- 依赖扫描(npm audit / pip-audit / Trivy)定时跑,高危自动建 Issue;
- WAF(ModSecurity 或 Cloudflare)规则集 + 告警通路;
- CVE feed 订阅(NVD GHSA)+ 自动命中内部 SBOM;
- 漏洞响应 playbook(按 OWASP IRT 模板)。
任何项目都必须包含:
- 需求与威胁模型;
- 漏洞分类与严重度排序;
- 模块化修复与对应测试;
- CI/CD 中的安全门禁;
- 边界与异常测试;
- 文档与 README;
- 复盘(漏洞复盘 / IR 复盘允许);
- 已知限制与后续工作。
8. 推荐开源资料
许可证提示:Juice Shop 为 MIT;OWASP 文档为 CC BY-SA 4.0;PortSwigger Academy 免费可注册;RFC 与 NIST 文档公开。复制代码前确认目标仓库 LICENSE。
默认使用顺序:先用 OWASP Top 10 / WSTG 建立全景 → 用 Juice Shop 或 Web Security Academy 跑实验 → 读 OWASP Cheat Sheet 学修复模式 → 在自己的 demo 上写测试 → 用 ZAP / Snyk 自动扫 → 把扫描接进 CI → 写复盘。
9. 学习资料汇聚(v0.3 自包含)
本节由本计划生成。链接指向原始材料。标准与 CVE 数据库会更新,实验记录必须写明版本和日期。
9.1 背景与动机
Web 安全的根问题是:应用信任了不该信任的输入,运行在不该运行的配置上,依赖了不该依赖的组件。
OWASP Top 10 是行业最被广泛接受的 Web 应用风险分类。从 2003 年起每 3~4 年更新一次,2021 版是当前主流。它不是漏洞清单,是风险类别:每类下有具体的 CWE 与 CVE 案例。OWASP 同时维护 ASVS(验收清单)、Cheat Sheet(修复模式)、WSTG(测试方法)。
历史上几个标志性事件推动了行业重视:
- SQL Slammer (2003):蠕虫利用 SQL 注入,几十分钟感染全球 75,000 台主机;
- XSS 蠕虫 (Samy, 2005):MySpace 上 24 小时传播百万级用户;
- Heartbleed (2014):OpenSSL 心跳扩展漏洞,让私钥外泄;
- Log4Shell (2021):Log4j 远程代码执行,CVSS 10.0,影响几乎所有 Java 应用;
- Spring4Shell (2022):Spring 框架 RCE,再次提醒供应链风险。
这些事件把”输入验证、依赖治理、响应流程”从可选项变成基础设施。
9.2 概念地图
flowchart LR
OWASP[OWASP Top 10]
OWASP --> A01[A01 Broken Access Control]
OWASP --> A02[A02 Cryptographic Failures]
OWASP --> A03[A03 Injection]
OWASP --> A04[A04 Insecure Design]
OWASP --> A05[A05 Security Misconfiguration]
OWASP --> A06[A06 Vulnerable Components]
OWASP --> A07[A07 Auth Failures]
OWASP --> A08[A08 Software/Data Integrity]
OWASP --> A09[A09 Logging/Monitoring]
OWASP --> A10[A10 SSRF]
Injection[注入类] --> SQL[SQL 注入]
Injection --> XSS[反射/存储/DOM XSS]
Injection --> Cmd[命令注入]
Injection --> NoSQL[NoSQL 注入]
Injection --> LDAP[LDAP 注入]
Injection --> XXE[XXE]
Auth[认证与会话] --> Pwd[密码哈希]
Auth --> Session[Session 管理]
Auth --> JWT[JWT]
Auth --> OAuth[OAuth 2.0/PKCE]
Auth --> MFA[MFA]
AccessCtrl[访问控制] --> IDOR[IDOR]
AccessCtrl --> CSRF[CSRF]
AccessCtrl --> CORS[CORS]
DataProtect[敏感数据] --> KMS[KMS/HSM]
DataProtect --> FieldEnc[字段级加密]
DataProtect --> LogMask[日志脱敏]
Config[安全配置] --> CSP[CSP]
Config --> HSTS
Config --> Cookie[cookie Secure/SameSite]
Config --> Referrer[Referrer-Policy]
Supply[依赖与供应链] --> SBOM[SBOM]
Supply --> Audit[npm/pip audit]
Supply --> Sign[签名验证]
Obs[可观测与响应] --> WAF
Obs --> IDS
Obs --> IR[IR Playbook]
Obs --> CVEFeed[CVE feed]
Threat[威胁建模] --> STRIDE
Threat --> BugBounty[漏洞奖励]
关系说明:OWASP Top 10 是上层分类;注入/认证/访问控制/数据/配置是按攻击面切的子主题;依赖、响应、威胁建模横贯所有类别。SBOM 决定 A06 与 A08 的修复速度;日志告警决定 A09 的有效性。
9.3 基础知识讲解
按论文 / 书 / 博客 / 人物 / 方法五类组织。每类至少 3 条,标注”主推 / 备查”。
9.3.1 经典论文 / 标准
| 资料 | 角色 | 评分 | 链接 |
|---|---|---|---|
| OWASP Top 10 2021 | 风险分类基线 | 5 | https://owasp.org/Top10/ |
| OWASP ASVS 4.0.3 | 应用安全验收清单 | 5 | https://owasp.org/www-project-application-security-verification-standard/ |
| OWASP WSTG 4.2 | Web 安全测试方法 | 4 | https://owasp.org/www-project-web-security-testing-guide/ |
| CWE/SANS Top 25 | 危险编程错误 | 4 | https://cwe.mitre.org/top25/ |
| NIST SP 800-53 | 安全控制目录(合规参考) | 4 | https://csrc.nist.gov/publications/detail/sp/800-53/rev-5/final |
主推:OWASP Top 10 + ASVS。备查:WSTG、CWE Top 25、NIST SP 800-53。
9.3.2 经典书籍
| 资料 | 角色 | 评分 | 链接 |
|---|---|---|---|
| Michal Zalewski, The Tangled Web | 浏览器安全机制全景 | 5 | https://lcamtuf.coredump.cx/tangled/ |
| Jim Manico / Matt Bagnara, Iron-Clad JavaScript | JS 应用安全 | 4 | https://web.archive.org/web/2024*/manning.com/books/iron-clad-javascript |
| Bryan Sullivan / Vincent Liu, Web Application Security, A Beginner’s Guide | Web 安全入门 | 4 | https://www.mheducation.com/highered/product/web-application-security-beginners-guide-sullivan-liu/ |
| Andrew Hoffman, Web Application Security | 现代 Web 安全全景 | 4 | https://www.oreilly.com/library/view/web-application-security/9781492053101/ |
| Chris Anley / John Heasman 等, The Database Hacker’s Handbook | 数据库攻击面 | 3 | https://www.wiley.com/en-us/The+Database+Hacker%27s+Handbook |
主推:Zalewski《The Tangled Web》。备查:Manico《Iron-Clad JavaScript》、Sullivan《Web Application Security》。
9.3.3 优秀博客 / 文档
| 资料 | 角色 | 评分 | 链接 |
|---|---|---|---|
| Mozilla MDN Web Security | 浏览器策略与 API | 5 | https://developer.mozilla.org/en-US/docs/Web/Security |
| PortSwigger Web Security Academy | 互动漏洞实验 | 5 | https://portswigger.net/web-security |
| OWASP Cheat Sheet Series | 修复模式速查 | 5 | https://cheatsheetseries.owasp.org/ |
| Troy Hunt Blog | 数据泄露与密码安全实践 | 4 | https://www.troyhunt.com/ |
| Scott Helme | CSP/HSTS/Subresource Integrity 实战 | 4 | https://scotthelme.co.uk/ |
| Cloudflare Security Blog | 大规模防御案例 | 4 | https://blog.cloudflare.com/tag/security/ |
| Google Security Blog | 0day 与生态防御 | 4 | https://security.googleblog.com/ |
主推:MDN Web Security + PortSwigger Academy。备查:OWASP Cheat Sheet、Troy Hunt、Scott Helme。
9.3.4 核心人物
| 人物 | 贡献 | 关键出处 |
|---|---|---|
| Michal Zalewski(p0) | 浏览器安全、AFL 模糊测试、The Tangled Web | lcamtuf.coredump.cx |
| Jim Manico | OWASP 创始人之一、Iron-Clad JavaScript | manico.net |
| Jeff Williams | OWASP 联合创始人、ASVS 与 Top 10 推动者 | OWASP 历史档案 |
| Mark Curphey | OWASP 创始人 | OWASP 历史档案 |
| Troy Hunt | Have I Been Pwned、数据泄露研究 | troyhunt.com |
| Robert Hansen(RSnake) | XSS Cheat Sheet 与 Clickjacking | ha.ckers.org 历史 |
| Jeremiah Grossman | XSS、Clickjacking 研究 | jeremiahgrossman.com |
| Linus Torvalds / Greg Kroah-Hartman | 内核安全与供应链(CVE 流程代表) | kernel.org |
主推:Zalewski、Troy Hunt、Jim Manico。备查:OWASP 创始团队、RSnake、Jeremiah Grossman。
9.3.5 开发方法
| 方法 | 适用 | 关键点 |
|---|---|---|
| Threat-first | 任何新功能先画 STRIDE | 在写代码前识别 Spoofing/Tampering/Repudiation/Information disclosure/DoS/Elevation |
| Trust-boundary input validation | 任何外部输入 | 在边界处校验类型、长度、字符集、范围;进入系统后假设可信 |
| Defense in depth | 纵深防御 | CSP + cookie Secure + SameSite + token rotation + WAF + 日志告警,单点失效不全盘崩塌 |
| Single-variable PoC | 验证漏洞或修复 | 每次只改一个变量,保留 payload、响应、修复前后对比 |
| Fix + test together | 修复漏洞 | 每个修复 commit 必须有对应失败测试;测试先于修复或同步提交 |
| SBOM-driven patching | 依赖治理 | 引入新依赖必看 SBOM;CI 跑 audit;高危 CVE 自动建 Issue |
| IR timeline | 漏洞响应 | 时间线:发现 → 定级 → 隔离 → 修复 → 验证 → 复盘;每步留证据 |
重点标准共 6 篇/项:
- OWASP Top 10 2021 — 风险分类基线。所有安全实践按这个分类去覆盖。
- OWASP ASVS 4.0.3 — 验收清单。可用于”DoD”和合规检查。
- CWE Top 25 — 危险编程错误。具体漏洞落点。
- NIST SP 800-53 Rev 5 — 安全控制目录。合规与政策。
- OWASP Cheat Sheet Series — 修复模式。每类漏洞的具体代码示例。
- OWASP WSTG 4.2 — 测试方法。黑盒测试步骤。
补充查阅:CWE 详情、NVD CVE 数据库、GHSA(GitHub Security Advisory)、CISA KEV(已知被利用漏洞目录)。
9.4 经典问题与经典案例
| # | 问题 | 为什么会重要 | 最简答案或证据 |
|---|---|---|---|
| 1 | Heartbleed(2014) | OpenSSL 心跳扩展泄露私钥 | 升级 OpenSSL;重新签发证书;撤销旧证书;更新密钥 |
| 2 | Log4Shell(2021) | Log4j JNDI 注入 RCE,CVSS 10.0 | 升级 Log4j ≥ 2.17.1;禁用 JNDI lookup;WAF 临时规则 |
| 3 | XSS via JSONP | 跨域读取用户数据 | 弃用 JSONP;改用 CORS + Authorization 头;CSP default-src 'self' |
| 4 | IDOR(Insecure Direct Object Reference) | URL 改 ID 越权读他人数据 | 每个对象访问走同一授权函数;以”对象属于当前用户”为前提 |
| 5 | SSRF(Server-Side Request Forgery) | 服务端代发请求打到内网 | 出站白名单;解析后 IP 检查;禁用 169.254/127.0.0.1;IMDSv2 |
| 6 | CSRF 借表单自动提交 | 登录态下被诱骗转账 | CSRF token + SameSite=Strict/Lax + 验证 Origin/Referer |
| 7 | JWT alg: none 与密钥混淆 | 客户端接受伪造 token | 强制算法白名单;服务端签名验证;密钥长度足够 |
| 8 | npm 包被植入恶意代码(event-stream, ua-parser-js, colors.js) | 供应链攻击 | 锁定文件进 git;npm audit;最小依赖;签名/sigstore 验证 |
| 9 | 敏感数据在日志中被打印 | token/密码/PII 外泄 | 日志中间件脱敏;结构化日志字段白名单;定期 grep |
| 10 | Spring4Shell(2022) | Spring 框架 RCE | 升级 Spring;JDK ≥ 17;WAF 临时规则 |
9.5 学习难点
概念难点
| 难点 | 为什么会卡 | 突破路径 |
|---|---|---|
| OWASP 是分类不是清单 | 看 Top 10 觉得空,不知道具体怎么改 | 每类至少跑一个真实漏洞;用 CWE 编号关联 |
| 信任边界不清 | 内部服务相互调用也算外部输入 | 画数据流图,标出每个边界;每个边界都校验 |
| 加密与签名的混淆 | 加密 ≠ 身份认证 | 写清”谁持有密钥、谁验证、提供什么性质” |
思维难点
| 难点 | 为什么会卡 | 突破路径 |
|---|---|---|
| 默认信任框架与库 | “Express 默认配置应该没问题吧” | 把每个默认配置当成攻击面查一遍;OWASP Cheat Sheet 对照 |
| 修复与绕过并存 | 加了 CSP 还有 nonce 绕过;加了 token 还有 CSRF 漏 | 复现攻击 → 修复 → 再复现 → 修复 → 文档化 |
| 风险沟通 | 业务只关心能不能上线 | 用 CVSS + 影响范围 + 修复成本三件套沟通 |
工程难点
| 难点 | 为什么会卡 | 突破路径 |
|---|---|---|
| 旧系统漏洞太多不知从哪开始 | 没有基线 | 先跑 ZAP Baseline + npm audit,按 CVSS 与可利用性排序 |
| CSP 一加就 break 前端 | inline script/style 满天飞 | 用 nonce 或 hash;分阶段:default-src 'self' → 逐项放开 |
| 依赖升级引发回归 | API 破坏 | 用 npm outdated + minor/patch 优先;锁文件 + CI 测试 |
| 日志脱敏漏字段 | 不同模块各自打印 | 用结构化日志框架(pino/winston)+ 字段白名单 + 集中脱敏中间件 |
9.6 技术标准与接口
9.6.1 Entity
| 名称 | 版本 | 发布组织 | 状态 | 许可证 / 可访问性 |
|---|---|---|---|---|
| OWASP Top 10 | 2021 | OWASP Foundation | 现行;2025 更新中 | CC BY-SA 4.0,公开 |
| OWASP ASVS | 4.0.3 | OWASP Foundation | 现行 | CC BY-SA 4.0,公开 |
| OWASP Cheat Sheet Series | 持续更新 | OWASP Foundation | 现行 | CC BY-SA 4.0,公开 |
| OWASP WSTG | 4.2 | OWASP Foundation | 现行 | CC BY-SA 4.0,公开 |
| CWE/SANS Top 25 | 2023 | MITRE / SANS Institute | 现行 | 公开 |
| NIST SP 800-53 | Rev 5 | NIST | 现行 | 公开 |
| CSP Level 3 | W3C CR | W3C Web App Sec WG | 现行 | 公开 |
| RFC 6265 — HTTP State Management Mechanism | 6265 | IETF | 现行 | 公开 |
| RFC 6265bis / RFC 6265 修订 + SameSite | RFC 6265 + RFC 6235(错误码)+ RFC 6265 修订 | IETF | 修订中 | 公开 |
| RFC 7636 — PKCE | 7636 | IETF | 现行 | 公开 |
| RFC 6749 — OAuth 2.0 | 6749 | IETF | 现行 | 公开 |
| RFC 6750 — Bearer Token Usage | 6750 | IETF | 现行 | 公开 |
| CycloneDX | 1.6 | OWASP CycloneDX WG | 现行 | Apache-2.0,公开 |
| SPDX | 2.3 | Linux Foundation | 现行 | CC BY-3.0,公开 |
9.6.2 Scope
- OWASP Top 10:风险类别与最小修复集。它不替代漏洞清单。
- ASVS:验收清单与控制级别。用于”DoD”与合规。
- WSTG:黑盒测试方法。不含具体工具教程。
- CSP:浏览器侧的内容源控制。它不替代输入校验,但能缩小 XSS 爆炸半径。
- SameSite cookie(RFC 6265 修订):限制第三方 cookie。配合 CSRF token 才完整。
- PKCE(RFC 7636):OAuth 公共客户端防截获。S256 优先。
- CycloneDX / SPDX:SBOM 格式。用于依赖治理与合规。
- CWE Top 25 / NVD CVE:具体漏洞落点。
9.6.3 Structure
必会字段、接口、API:
- HTTP 头:
Content-Security-Policy、Strict-Transport-Security、Set-Cookie(Secure; HttpOnly; SameSite=Strict)、Referrer-Policy、X-Frame-Options、Permissions-Policy; - CSP 指令:
default-src、script-src(含'nonce-...'与'sha256-...')、style-src、img-src、connect-src、frame-ancestors、base-uri、form-action; - Cookie 属性:
Secure、HttpOnly、SameSite=Strict/Lax/None、Domain、Path、Max-Age/Expires、__Host-前缀; - OAuth 字段:
response_type=code、code_challenge、code_challenge_method=S256、scope、state; - JWT:
alg(必须白名单)、kid、exp、iat、nbf、aud、iss; - SBOM:组件名、版本、许可证、哈希、依赖关系;
- IR 模板:发现时间、定级、影响范围、隔离动作、修复时间、复盘链接。
9.6.4 Ecosystem
- 漏洞训练:OWASP Juice Shop、PortSwigger Web Security Academy、DVWA、HackTheBox、TryHackMe;
- 扫描器:OWASP ZAP、Burp Suite Community、nmap、Nikto、njsscan、Trivy、Snyk、Dependabot;
- 依赖治理:npm audit、pip-audit、Cargo audit、bundle audit、Renovate、Dependabot;
- 签名验证:sigstore / cosign、in-toto、SLSA 框架;
- CVE 数据库:NVD、GHSA、CISA KEV、OSV;
- 密钥管理:HashiCorp Vault、AWS KMS / Secrets Manager、GCP KMS、Azure Key Vault;
- 日志:pino、winston(Node)、logback(Java)、structured logging;
- 事实标准 vs 标准本身:浏览器 Root Program 决定 CA 信任;OS 包管理器决定实际可用版本;这些不是 RFC。
9.6.5 Depth Tiers
| 层级 | 名称 | 必须看到什么 |
|---|---|---|
| L0 | 知道存在 | 知道 OWASP Top 10、CWE/CVE、CSP、HSTS、CSRF token、SBOM 是什么 |
| L1 | 看得懂示例 | 能读懂一段含 CSP、cookie、PKCE 的代码或响应头 |
| L2 | 能正确调用 | 能为新功能添加 CSP、CSRF token、依赖审计、密钥轮换 |
| L3 | 能解释与排错 | 能解释 CSP 报警、XSS payload 变种、依赖 CVE 影响范围、IR 流程断点 |
| L4 | 能设计与扩展 | 能设计企业级安全架构、S-SDLC、IR 团队、红蓝对抗、漏洞奖励计划 |
本计划目标:L3。综合项目可触及局部 L4(如设计 IR playbook 与 SBOM 流水线),但不作为硬门槛。
9.6.6 Source
- OWASP 仓库:https://github.com/OWASP/ 与 https://owasp.org/
- NIST 仓库:https://csrc.nist.gov/publications 与 https://nvd.nist.gov/
- W3C CSP:https://www.w3.org/TR/CSP3/
- IETF RFC:https://www.rfc-editor.org/(RFC 6265、6749、6750、7636、6797、7034)
- CycloneDX 规范:https://cyclonedx.org/specification/overview/
- SPDX 规范:https://spdx.dev/specifications/
- 引用版本快照日期:2026-07-30。
引用
10. 常见误区
- 把「加 HTTPS」当安全终点,忽略 TLS 1.2 与弱 cipher suite、证书钉扎缺失、HTTP 头(X-Frame-Options / HSTS / CSP)未配置;
- 看到扫描器无 critical 就以为安全,忽略逻辑漏洞(IDOR、批量越权、参数篡改),扫描器查不出业务缺陷;
- 「WAF 部署 = 安全完成」,忽略 WAF 默认规则之外的 0-day、自定义业务接口、绕过技巧(编码混淆、协议走私);
- 误把 OAuth 当成「一切授权方案」,不知道 OAuth 2.0 是授权框架、OIDC 才是身份层,PKCE 才是公网客户端必备;
- 密码哈希用 SHA-256 / SHA-512 单轮,认为「够长了」——没用 salt + 工作因子,GPU 几秒就能破;
- JWT 存敏感数据在 payload 里,以为签名了就安全——payload 是 base64 编码明文,谁都能读;
- 「CSP 加了
'self'就完事」,忽略 inline script、eval、第三方 CDN、frame-ancestors与require-trusted-types-for; - 「依赖扫描跑过一次就放心」,漏掉 transitive dependencies、不锁版本、不看 license、不验证 SBOM 与签名;
- CORS 配置
Access-Control-Allow-Origin: *配合Access-Control-Allow-Credentials: true——浏览器直接拒绝后者,但很多人误以为「开了就是安全的」; - 漏洞修复后不做回归测试,patch 一个 XSS 又被另一个 payload 绕过;
- 「密码 8 位 + 数字」就够用——NIST SP 800-63B 早已推荐 12 位以上 + 字典检查 + 黑名单 + breach 查询;
- 把日志脱敏写在 client 端,攻击者绕过 client 直接调 API 就能看到原始数据;
- 以为「上了 IAM 就权限最小化」,却没定期清理离职账号、过宽的 trust policy、跨账号 role chaining;
- 安全事件发生后第一件事不是遏制而是 root cause——结果攻击者仍在网内,扩散到第三台机器;
- 「CSP report-only 模式」上线后忘了切 enforce——CSP 只报告但不拦截,等于没生效。
11. 所有知识点分类(统一规则)
后续新增主题时按此归类,再套用一页纸模板;一个主题可有一个主分类和一个辅助分类。
- 编程语言:C、Java、Python、JavaScript、Go、Rust、C++ 等
- 数据结构与算法:排序、查找、图、动态规划、设计方法学
- 计算机基础:操作系统、计算机网络、数据库、计算机组成原理
- 工程技术:Git、Linux、Docker、CI/CD、测试、监控
- Web 与后端:HTTP、REST API、Spring Boot、FastAPI、Web 框架
- 前端与客户端:HTML/CSS、JavaScript、React、移动端
- 数据与人工智能:SQL、机器学习、深度学习、大模型应用
- 安全与可靠性:Web 安全、系统安全、备份与恢复、混沌工程、可观测
- 项目与职业能力:系统设计、文档、协作、面试
本计划归属:安全与可靠性 主;Web 安全是其中面向 Web 应用的纵深防御子集,与 [[linux-hardening]] 互为补充(系统层 vs 应用层),与 [[web-security-supply-chain]] 等 5 个子主题形成完整链路。