请解释 JWT 的定义,并说明在项目中使用 JWT 时需要注意哪些安全问题?
考察说明
考查对 JWT 概念的理解以及在实际应用中识别和规避安全风险的能力。
回答思路
- 【回答框架 1】JWT 即 JSON Web Token,是一种基于 JSON 的开放标准(RFC 7519),用于在各方之间安全地传输声明信息。它由三部分组成:Header(头部)、Payload(载荷)和 Signature(签名),通常以 Base64Url 编码并用点号分隔。Header 包含令牌类型和签名算法,Payload 包含实际声明数据,Signature 用于验证令牌的完整性和来源。
- 【回答框架 2】使用 JWT 的安全注意事项包括:1. 签名算法安全:必须使用强算法(如 RS256、ES256),避免使用 HS256 等对称算法时密钥泄露,且严禁接受算法为 none 的令牌。2. 密钥管理:对称密钥或非对称私钥必须妥善保管,定期轮换,防止泄露。3. 传输安全:JWT 应通过 HTTPS 传输,防止中间人窃取。4. 存储安全:客户端存储 JWT 时,应避免存储在 localStorage 等易受 XSS 攻击的位置,优先使用 HttpOnly Cookie。5. 过期时间:设置合理的过期时间(exp),并考虑使用刷新令牌机制。6. 敏感信息:不要在 Payload 中存放敏感数据,因为 J
- 【回答框架 3】此外,还需注意防止重放攻击,可通过 jti(唯一标识)和一次性使用机制缓解;验证签名时必须严格校验算法和密钥,防止算法混淆攻击;对于跨域场景,需配置正确的 CORS 策略,避免令牌被恶意站点利用。
- 【回答框架 4】在实际项目中,应结合具体业务场景,权衡无状态性和安全性,必要时引入黑名单或撤销机制,因为 JWT 本身无法主动失效。
- 【关键点 1】JWT 由 Header、Payload、Signature 三部分组成,用于安全传输声明。
- 【关键点 2】必须使用强签名算法(如 RS256),禁止接受算法为 none 的令牌。
- 【关键点 3】敏感信息不应放入 Payload,因为 JWT 默认不加密。
- 【关键点 4】JWT 应通过 HTTPS 传输,并存储在 HttpOnly Cookie 中以防 XSS。
- 【关键点 5】设置合理过期时间,并考虑使用刷新令牌和黑名单机制应对撤销需求。
- 【易错点 1】误以为 JWT 是加密的,实际默认只签名,Payload 可被解码。
- 【易错点 2】忽略算法混淆攻击,未严格校验签名算法和密钥。
- 【易错点 3】将 JWT 存储在 localStorage 中,增加 XSS 泄露风险。