0Pricing
Cyber Security Academy · 课时

令牌攻击与强化

防御身份验证流程遭受滥用。

令牌攻击与强化 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。

令牌即凭据

在现代身份认证中,令牌就是凭据。持有有效持有者令牌的任何人,在令牌过期或被撤销前,都会被视为已认证主体。

  • 这意味着令牌被盗等同于凭据被盗。
  • 强化措施的重点是限制令牌生命周期、将令牌绑定到持有者,并支持快速撤销。

本课介绍针对 OAuth/OIDC/SAML 令牌的攻击,以及用于应对这些攻击的防御控制措施。

JWT 算法混淆

一种经典的 JWT 攻击会利用 alg 标头。

  • 如果接受 alg: none,攻击者就能伪造未签名的令牌。
  • RS256 与 HS256 混淆:攻击者使用公开的 RSA 密钥作为 HMAC 密钥,为令牌重新签名。

防御措施:在服务器端固定预期算法,绝不让令牌决定运行哪条验证路径。

Vulnerable: verify(token, key)  // alg taken from header
Hardened:   verify(token, key, { algorithms: ["RS256"] })
// reject alg:none, reject HS* when RS* expected

通过 XSS 和日志窃取令牌

最常见的令牌泄露方式,就是直接窃取有效令牌。

  • XSS 会从 localStorage 或内存中读取令牌。
  • 令牌出现在网址中时,会通过浏览器历史记录、引用方标头和服务器日志泄露。
  • 详细记录 Authorization 标头。

浏览器会话优先使用 httpOnly、Secure、SameSite Cookie,并从日志和网址中清除令牌。

Set-Cookie: session=...; HttpOnly; Secure; SameSite=Lax
// keeps JS (and thus XSS) from reading the token

重放攻击

重放攻击会重新使用捕获到的有效令牌,以受害者身份执行操作。

  • 可通过较短的过期时间、一次性 nonce(OIDC)以及断言 ID 跟踪(SAML)来缓解。
  • TLS 可防止被动网络捕获。
  • 发送方约束型令牌即使被盗,也能阻止令牌重用。
Replay defenses:
  short exp + nonce/jti uniqueness
  TLS everywhere
  sender-constrained tokens (mTLS / DPoP)

发送方约束型令牌

任何持有持有者令牌的人都可以使用它。发送方约束型令牌会将令牌绑定到特定的客户端密钥。

  • mTLS 绑定令牌(RFC 8705)会将令牌绑定到客户端 TLS 证书。
  • DPoP(RFC 9449)会将令牌绑定到持有证明密钥,客户端针对每个请求使用该密钥签名。

这样一来,没有匹配的私钥,窃取到的令牌就毫无用处。

DPoP: each request carries a signed proof JWT
  DPoP: <proof-jwt signed with client private key>
  Authorization: DPoP <access_token>

较短的生命周期与刷新轮换

限制任何被盗令牌可发挥作用的时间窗口。

  • 让访问令牌保持较短生命周期(几分钟)。
  • 使用刷新令牌轮换:每次刷新都会签发新的刷新令牌,并使旧令牌失效。
  • 将轮换后的刷新令牌再次重用检测为被盗信号,并撤销整条令牌链。
On /token refresh:
  issue new RT, invalidate old RT
  if old RT presented again -> breach -> revoke family

令牌撤销与自省

自包含 JWT 会一直有效到过期,这使撤销变得复杂。请提供能够快速切断访问权限的机制。

  • 撤销端点(RFC 7009)会使刷新令牌和访问令牌失效。
  • 自省(RFC 7662)允许资源服务器实时检查令牌状态。
  • 对于关键撤销操作,可根据 jti 维护拒绝列表。
POST /introspect  token=...
  -> { "active": true, "sub": "...", "scope": "read" }
POST /revoke      token=...

受众与作用域强制校验

有效令牌并不会自动获得访问您 API 的授权。请强制校验令牌用途。

  • 检查 aud,确保为其他服务签发的令牌无法重放到您的服务。
  • 按端点强制执行作用域;不要假定有效令牌意味着拥有完整访问权限。
  • 验证 iss,阻止来自不受信任签发方的令牌。

这可以阻止跨服务令牌重用和混淆代理滥用。

混淆与跨提供方攻击

当客户端支持多个身份提供方时,混淆攻击可能诱使客户端将某个 IdP 签发的授权码或令牌发送到攻击者指定的其他端点。

  • 客户端无法确定响应来自哪个 AS。
  • 防御措施:使用 iss 参数(RFC 9207)将响应绑定到签发方,并按提供方验证 state。
/authorize ... &state=<provider-bound>
callback must include &iss=<expected-AS>
client verifies iss matches the AS it started with

安全存储与传输

令牌的存储位置和方式决定其暴露风险。

  • 浏览器会话:使用 httpOnly、Secure、SameSite Cookie;避免使用 localStorage。
  • 移动设备:使用 OS 密钥链/密钥库,绝不使用明文文件。
  • 服务器:使用密钥管理器,静态加密,并按作用域实施最小权限。
  • 传输过程中始终使用 TLS;绝不把令牌嵌入查询字符串。

令牌强化检查清单

将这些控制措施整合为一套可执行的基线。

  • 固定算法;拒绝 alg: none 和算法混淆攻击。
  • 验证 iss、aud、exp、签名、nonce/state。
  • 设置较短的访问令牌 TTL,并配合刷新轮换和重用检测。
  • 对于高价值 API,优先使用发送方约束型令牌(DPoP/mTLS)。
  • 支持撤销和自省。
  • 安全存储令牌;不要将令牌放入网址和日志中。
Hardening baseline:
  [ ] alg pinned, none rejected
  [ ] iss/aud/exp/sig/nonce validated
  [ ] short TTL + RT rotation + reuse detection
  [ ] DPoP/mTLS for sensitive scopes
  [ ] revoke + introspect available

快速检查:化解被盗令牌的危害

请选择最能限制令牌被盗本身所造成损害的控制措施。

回顾:令牌攻击与强化

核心要点:

  • 令牌就是凭据;令牌被盗等同于账户接管。
  • 通过固定算法并验证 iss、aud、exp、签名、nonce 来防御 JWT。
  • 通过较短生命周期以及带重用检测的刷新轮换来限制暴露。
  • 发送方约束型令牌(DPoP/mTLS)可以使被盗的持有者令牌失效。
  • 提供撤销和自省,并避免将令牌放入网址、日志和 localStorage 中。

常见问题解答

「令牌攻击与强化」课时是免费的吗?

是的 — 「令牌攻击与强化」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。

「令牌攻击与强化」这节课中我会学到什么?

防御身份验证流程遭受滥用。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cyber Security Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「令牌攻击与强化」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cyber Security Academy 课中编写并运行代码吗?

能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. OAuth 2.0 流程
  2. OpenID Connect(OIDC)
  3. SAML 与联合身份
  4. 令牌攻击与强化
← 返回 Cyber Security Academy