JWT 被抓取了怎么办?
选中新版正文中的对应文字,然后点“定位到这里”。
星球一位球友问:面试的时候遇到一个问题,如果有人通过抓包获取jwt,应该如何应对?
本来想亲自写一篇,但刚好在货拉拉技术公众号上看到了这篇帖子,写得竟然很详细,于是就直接收录了进来,简单进行了一些细节调整,大家可以好好看一下,干货啊

一、JWT 简介
JSON Web Token (JWT) 是一种紧凑的、基于 JSON 的开放标准 (RFC 7519),常用于不同主体(客户端和服务器)之间安全地传递信息。JWT 通常由三部分组成:
- Header(头部): 定义令牌类型和加密算法,如
{"alg": "HS256", "typ": "JWT"} - Payload(载荷): 包含声明信息(claims),如用户身份、权限等。
- Signature(签名): 用来验证令牌的真实性和完整性。
一个示例的 JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT 被广泛用于身份认证,授权场景。服务端验证 JWT 时,可以通过解密签名来判断消息是否被篡改。
二、JWT 自身攻击面
2.1 算法混淆攻击(Algorithm Confusion Attack)/"None"算法攻击
技术要点:
- 攻击者通过篡改 JWT 的 Header 部分,将签名算法从安全算法(如 HS256)更改为不安全的算法(如 none),从而伪造合法 Token。
- 攻击者通过修改 JWT 的算法字段(如从 RSA 改为 HMAC),可以利用服务端验证机制的弱点来篡改令牌。例如,当服务端没有正确验证算法时,攻击者可能使用公钥重新签名令牌并将其发送回来,导致验证成功,即使令牌已经被篡改
示例:
原始 Header:
{"alg": "HS256","typ": "JWT"}
攻击后被篡改为:
{"alg": "none","typ": "JWT"}
此时 JWT 将不再进行签名验证,攻击者可以伪造任意 Payload。例如:
eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJ1c2VySWQiOiIxMjMifQ.
解决方案:
- 在服务端严格校验 alg 字段,不允许使用 none 等不安全的算法。
- 在生成和解析 JWT 时,明确指定并验证安全算法,如 HS256 或 HS512。
payload = jwt.decode(token, self.secret, algorithms=["HS256", "HS512"])
userId = payload['userId']
username = self.db_lookup(userId, "username")
2.2 弱密钥导致 Token 可伪造
技术要点:
- 如果服务端使用弱密钥或者密钥管理不当,攻击者可以通过暴力破解或暴露的密钥生成伪造的 JWT,绕过验证。
- 在对称加密...
未能定位到原文的划线
已加入星球,可直接知识星球授权登录
二哥编程星球目前包含:
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
真诚点赞 诚不我欺
回复