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

认证、授权与会话:从密码哈希到 OAuth/PKCE 与 IDOR/CSRF 防御

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

#auth#oauth#jwt#csrf#idor

覆盖 A07/A01:密码哈希、Session、JWT、OAuth 2.0/PKCE、MFA、对象级授权、CSRF 与 CORS 防御

父主题

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

子主题(0)

认证、授权与会话:从密码哈希到 OAuth/PKCE 与 IDOR/CSRF 防御

0. 元信息

1. 学习路线

密码哈希(Argon2 / bcrypt)
  → Session vs JWT 的取舍
  → OAuth 2.0 角色与流程
  → PKCE(公共客户端)
  → MFA(TOTP / WebAuthn)
  → 垂直与水平越权
  → IDOR(Insecure Direct Object Reference)
  → CSRF token + SameSite + Origin/Referer 验证
  → CORS 配置
  → JWT 风险(alg 攻击、密钥泄露、撤销)

2. 阶段周数分配

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

3. 九阶段表

阶段核心知识实践产出可观察学会标准
1. 密码哈希Argon2id、bcrypt、salt、stretching、breach 检查替换 MD5/SHA1 哈希;接 HIBP API同一密码两次哈希结果不同;密码永不明文落地
2. Session服务端 Session、Secure/HttpOnly/SameSite、固定攻击服务端 Session 改造Session ID 重生于登录后;cookie 三属性齐全
3. JWT 风险alg=none、kid 注入、密钥混淆、撤销难题安全签发与验签强制算法白名单;服务端签名验证;密钥长度足够
4. OAuth 2.0 + PKCEAuthorization Code、PKCE S256、state客户端 + 服务端最小 OAuth 流公共客户端也用 PKCE;redirect_uri 严格白名单
5. MFATOTP、WebAuthn/FIDO2、备份码TOTP 注册与登录二次因子强制;恢复码一次性
6. 垂直越权RBAC、管理员路径保护对象级授权中间件普通用户访问 admin 返回 403
7. 水平越权 / IDORURL 改 ID 越权所有对象访问走同一授权函数跨用户读取返回 403 或 404
8. CSRFtoken、SameSite、Origin/Referer 校验CSRF token 中间件跨域 POST 必须 token + SameSite + Origin
9. CORS简单/预检、Access-Control-Allow-OriginCORS 中间件白名单不出现 * + credentials;Vary: Origin

关键陷阱:JWT 不是 Session 的替代;CSRF token 单独不够,需要配合 SameSite 与 Origin 校验;OAuth 公共客户端必须用 PKCE;对象级授权要”以属于当前用户为前提”。

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 背景与动机

OWASP Top 10 2021 把”A07 Identification and Authentication Failures”与”A01 Broken Access Control”列为前两位。它们覆盖了”你是谁”和”你能做什么”两个核心问题。

历史上踩过的坑:

这些事件的共同点:密码弱哈希、对象授权缺失、token 管理失误、CORS/CSRF 配置松。本子主题逐一拆解。

9.2 概念地图

flowchart LR
  AuthN[认证 AuthN] --> Pwd[密码哈希]
  AuthN --> Session[Session]
  AuthN --> JWT
  AuthN --> OAuth[OAuth 2.0]
  AuthN --> MFA[TOTP / WebAuthn]
  Pwd --> Argon2[Argon2id]
  Pwd --> Bcrypt[bcrypt]
  Pwd --> Breach[泄露检查 HIBP]
  Session --> Cookie[Cookie: Secure/HttpOnly/SameSite]
  JWT --> Alg[alg 白名单]
  JWT --> Kid[kid 注入]
  JWT --> Revoke[撤销与黑名单]
  OAuth --> Code[Authorization Code]
  OAuth --> PKCE
  OAuth --> State
  OAuth --> Scope
  OAuth --> Redirect[redirect_uri 白名单]
  AuthZ[授权 AuthZ] --> RBAC
  AuthZ --> ABAC
  AuthZ --> ObjectAuth[对象级授权]
  AccessCtrl[访问控制] --> Vertical[垂直越权]
  AccessCtrl --> Horizontal[水平越权/IDOR]
  CSRF[CSRF] --> Token[CSRF token]
  CSRF --> SameSite
  CSRF --> Origin[Origin/Referer 校验]
  CORS[CORS] --> Simple[简单请求]
  CORS --> Preflight[预检 OPTIONS]
  CORS --> AllowOrigin[Allow-Origin 白名单]
  CORS --> Credentials[credentials]

关系说明:认证回答”你是谁”;授权回答”你能做什么”;对象级授权覆盖单条资源;CSRF 与 CORS 处理跨域身份传递。OAuth 解决”代用户授权第三方”,不是认证协议本身。

9.3 基础知识讲解

9.3.1 经典论文 / 标准

资料角色评分链接
OWASP Top 10 2021 — A01 Broken Access Control风险分类5https://owasp.org/Top10/A01_2021-Broken_Access_Control/
OWASP Top 10 2021 — A07 Auth Failures风险分类5https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures/
OWASP Authentication Cheat Sheet认证最佳实践5https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html
OWASP Authorization Cheat Sheet授权最佳实践5https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html
OWASP CSRF Prevention Cheat SheetCSRF 防御5https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html
OWASP Session Management Cheat SheetSession 最佳实践4https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html
OWASP JWT Cheat Sheet (Java)JWT 安全4https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html
RFC 6749 — OAuth 2.0授权框架5https://www.rfc-editor.org/rfc/rfc6749
RFC 7636 — PKCE公共客户端密钥交换5https://www.rfc-editor.org/rfc/rfc7636
RFC 6750 — Bearer Token UsageToken 使用4https://www.rfc-editor.org/rfc/rfc6750
RFC 6265 — HTTP State Managementcookie 规范4https://www.rfc-editor.org/rfc/rfc6265
RFC 6238 — TOTP时间一次性密码4https://www.rfc-editor.org/rfc/rfc6238
WebAuthn (W3C)FIDO2 强认证5https://www.w3.org/TR/webauthn-2/

主推:OWASP Auth/AuthZ/CSRF Cheat Sheet + RFC 6749/7636。备查:JWT Cheat Sheet、TOTP RFC、WebAuthn。

9.3.2 经典书籍

资料角色评分链接
OAuth 2.0 in Action (Justin Richer)OAuth 协议实战5https://www.manning.com/books/oauth-2-in-action
API Security in Action (Neil Madden)API 安全全景4https://www.manning.com/books/api-security-in-action
Iron-Clad JavaScript (Jim Manico)JS 安全编码4https://web.archive.org/web/2024*/manning.com/books/iron-clad-javascript
Cryptography Engineering (Ferguson 等)加密工程(含认证)4https://www.schneier.com/books/cryptography-engineering/

主推:Richer《OAuth 2.0 in Action》。备查:Madden《API Security in Action》、Manico《Iron-Clad JavaScript》。

9.3.3 优秀博客 / 文档

资料角色评分链接
PortSwigger Web Security Academy — Access Control互动实验5https://portswigger.net/web-security/access-control
PortSwigger Web Security Academy — CSRF互动实验5https://portswigger.net/web-security/access-control
Auth0 DocsOAuth/JWT 实战4https://auth0.com/docs
Okta Developer — OAuth 2.0OAuth 实战4https://developer.okta.com/docs/reference/api/oidc/
OWASP OAuth 2.0 Cheat SheetOAuth 修复模式4https://cheatsheetseries.owasp.org/cheatsheets/OAuth2_Cheat_Sheet.html
Have I Been Pwned (HIBP)密码泄露检查4https://haveibeenpwned.com/
Mozilla MDN — SameSite cookiesSameSite 行为4https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite

主推:PortSwigger Academy(Access Control + CSRF)+ Auth0 Docs。备查:Okta、OWASP OAuth Cheat Sheet、MDN SameSite。

9.3.4 核心人物

人物贡献关键出处
Justin RicherOAuth 2.0 in Action、IETF OAuth WGapisyouwonthate.com
Dick HardtOAuth 2.0 推动者OAuth 历史演讲
Nat SakimuraOAuth / JWT 推广sakimura.org
John BradleyOAuth / WebAuthn 推动RFC 6749、7636
Jim ManicoOWASP 联合创始人、Iron-Clad JavaScriptmanico.net
Neil MaddenAPI Security in Actionneilmadden.blog

主推:Justin Richer、Jim Manico。备查:Nat Sakimura、John Bradley、Neil Madden。

9.3.5 开发方法

方法适用关键点
Hash with Argon2id密码t ≥ 3, m ≥ 64 MiB, p ≥ 1;或 bcrypt cost ≥ 12
Session regeneration防 Session 固定登录后换 ID;登出销毁
JWT verify strict防 alg 攻击强制算法白名单;服务端签发;密钥长度足够
PKCE S256公共客户端code_challenge_method=S256code_verifier ≥ 43 字符
Object auth in one function防 IDOR所有 GET/PUT/DELETE /resource/:id 走同一 authorize(user, resource)
SameSite=Lax + token防 CSRF表单 POST 同时验证 token 与 Origin/Referer
CORS allowlist防跨域窃取不写 *;用 Vary: Origin;credentials 必须显式 origin
MFA optional but enforced for sensitive ops提升安全改密码、改支付、登出全部设备等敏感操作强制 MFA

9.4 经典问题与经典案例

#问题为什么重要最简答案或证据
1LinkedIn SHA1 无 salt650 万密码几天内被破用 Argon2id/bcrypt + 强制 salting;落 HIBP 检查
2JWT alg: none 与密钥混淆攻击者伪造 token强制 alg 白名单;服务端签发 + 验证
3IDOR 越权读他人订单改 ID 就越权对象级授权中间件;返回 403/404 而非泄露存在性
4OAuth 公共客户端无 PKCEauthorization code 被截获强制 PKCE S256;code_verifier 一次性
5CSRF 借表单自动提交登录态下被诱骗转账CSRF token + SameSite=Strict/Lax + Origin/Referer 校验
6CORS * + credentials跨域任意源读敏感响应不允许 * 与 credentials 同存;用白名单 origin
7Session 固定攻击者预置 session ID 诱骗登录登录后重新生成 session ID;旧 ID 失效
8弱密码策略123456 / password 进入系统最小长度 12 + 常见密码列表拦截 + 泄露检查
9TOTP seed 明文存数据库数据库泄露后 2FA 也失效seed 用 KMS 加密;服务端能重新签发
10Facebook View As token 泄露1 亿用户 access token 外泄每次发 token 走授权中间件;区分”谁能拿到什么”

9.5 学习难点

概念难点

难点为什么会卡突破路径
Session vs JWT各有取舍Session:服务端可撤销;JWT:跨服务但难撤销;选场景匹配
OAuth 不是认证协议经常被当 OIDCOAuth 授权;OIDC 在 OAuth 上加 ID Token
CSRF 与 CORS 混都涉及”跨域”CSRF:身份被借;CORS:资源被借;目标不同

思维难点

难点为什么会卡突破路径
“我们已经登录了,安全了”没区分认证与授权每个对象都过授权函数;区分”我是谁”和”我能拿这个资源吗”
“JWT 永不过期方便”难撤销短 TTL + refresh token + 黑名单;敏感操作重新认证
“前端隐藏就算防了”API 自己也要鉴权后端独立校验;前端仅做 UX

工程难点

难点为什么会卡突破路径
旧系统密码哈希升级历史用户密码无法改登录时检测哈希算法;下次登录升级;强制重置触发升级
OAuth 集成兼容第三方库 bug用成熟库(Auth0 SDK、NextAuth);自己写最少代码;写集成测试
MFA 强制执行难用户抱怨风险分层:敏感操作强制;非敏感场景给恢复码
CORS 调试浏览器缓存 / 预检失败显式 Vary: Origin;抓 OPTIONS 请求;服务器日志

9.6 技术标准与接口

9.6.1 Entity

名称版本组织状态许可证
OWASP Top 102021OWASP现行CC BY-SA 4.0
OWASP ASVS4.0.3OWASP现行CC BY-SA 4.0
RFC 6749 — OAuth 2.02012IETF现行公开
RFC 7636 — PKCE2015IETF现行公开
RFC 6750 — Bearer Token2012IETF现行公开
RFC 6235 — SameSitedraftIETF草案公开
RFC 6265 — Cookies2011IETF现行公开
RFC 6238 — TOTP2011IETF现行公开
WebAuthn Level 22024W3C推荐公开
FIDO2 / CTAP2持续FIDO Alliance现行公开
Argon2RFC 9106IETF现行CC BY 4.0(参考实现)
bcryptNiels Provos-事实标准公开
JWTRFC 7519IETF现行公开

9.6.2 Scope

9.6.3 Structure

必会字段、接口、API:

9.6.4 Ecosystem

9.6.5 Depth Tiers

层级能力
L0知道密码哈希、Session、JWT、OAuth、CSRF、CORS 是什么
L1看懂一段含 PKCE、SameSite、CORS 的代码
L2能为新功能实现 Argon2id、Session、MFA、对象授权、CSRF 防护
L3能解释 JWT 撤销难题、OAuth PKCE 必要性、IDOR 修法、CORS 与 credentials 互斥
L4能设计企业级身份治理、S-SDLC 与零信任访问

本计划目标:L3

9.6.6 Source

10. 常见误区

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

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

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


直接依赖(0)

查看知识图谱