面试题答案
一键面试1. 中间人攻击(MITM)
- 威胁分析:攻击者可能拦截用户与服务器之间的通信,获取JWT,进而使用该令牌进行未授权访问。
- 应对策略:
- 使用HTTPS:强制使用HTTPS协议进行通信,通过SSL/TLS加密,防止数据在传输过程中被窃取或篡改。例如在Spring Boot应用中,可配置SSL证书实现HTTPS。
- 验证JWT签名:服务器端在收到JWT后,使用密钥验证签名的完整性,确保JWT未被篡改。如在Java中使用JJWT库验证签名。
2. 令牌泄露
- 威胁分析:令牌可能因多种原因泄露,如客户端代码漏洞、设备被盗、钓鱼攻击等,导致攻击者可使用该令牌进行恶意操作。
- 应对策略:
- 设置合理过期时间:JWT设置较短的过期时间,如15分钟,降低令牌泄露后的风险。可结合刷新令牌机制,在短时间令牌过期后,使用刷新令牌获取新的有效令牌。
- 安全存储令牌:客户端应安全存储JWT,如在HTTP-only cookie中存储,防止XSS攻击窃取令牌;或者在移动应用中使用安全的本地存储方式。
- 令牌黑名单:建立令牌黑名单,当令牌泄露时,将其加入黑名单,服务器端验证时拒绝该令牌。可使用Redis等缓存存储黑名单。
3. 重放攻击
- 威胁分析:攻击者捕获合法的JWT,多次重放以获取重复的服务访问权限。
- 应对策略:
- 一次性使用令牌:在JWT中添加唯一标识符,服务器记录已使用的标识符,拒绝重复使用的令牌。
- 时间戳验证:JWT中包含时间戳,服务器验证令牌时间戳是否在合理范围内,防止旧令牌重放。
4. 密钥管理不当
- 威胁分析:如果JWT签名密钥泄露,攻击者可以伪造任意有效的JWT。
- 应对策略:
- 安全存储密钥:密钥应加密存储在安全的地方,如使用硬件安全模块(HSM),提高密钥的安全性。
- 定期更换密钥:定期更新JWT签名密钥,降低密钥泄露的风险。更新密钥时,需要平滑过渡,确保新旧密钥都能正确验证令牌。
5. 弱密码或密码泄露
- 威胁分析:如果用户密码强度不够或密码泄露,攻击者可能通过暴力破解或使用泄露密码获取用户的JWT。
- 应对策略:
- 密码策略:要求用户设置强密码,包含大小写字母、数字和特殊字符,且具有一定长度。
- 多因素认证(MFA):除密码外,增加额外的认证因素,如短信验证码、硬件令牌等,提高认证的安全性。
6. 前端安全漏洞
- 威胁分析:如XSS(跨站脚本攻击)、CSRF(跨站请求伪造)等前端漏洞可能导致JWT泄露或被滥用。
- 应对策略:
- XSS防护:对用户输入进行严格的过滤和转义,防止恶意脚本注入。在后端和前端都进行相关处理。
- CSRF防护:使用CSRF令牌,在用户请求时验证令牌的有效性,防止跨站请求伪造。如在Spring Security中可配置CSRF防护。