前端安全 面试题
共 35 道 前端安全 面试题。答案默认折叠,便于先自行作答。 1. 如果发现JWT Token泄露,如何快速响应? 难度:3 · 类型:QA 题目要点 定位:确认泄露的是单个用户 Token 还是全局密钥。 拉黑:立即将泄露的 Token jti 加入 Redis 禁用名单。 阻断:如果是密钥泄露,立即更新环境变量中的 JWT_SECRET。 通知:提醒受影响用户,并建议其修改密码(以防攻击者通过其他渠道获取了账号控制权)。 审计:检查该 Token 泄露期间产生的异常操作日志,进行回滚或补偿。 参考答案 由于 JWT 是无状态的(服务器默认不存储 Token,无法像 Session 那样轻易在服务端作废),快速响应的核心思路在于阻断该 Token 的有效性或强制变更鉴权环境。 以下是针对不同场景的快速响应方案: 1. 服务端拦截:引入“黑名单”机制(最快响应) 这是最直接的补救措施。虽然 JWT 旨在去中心化校验,但在紧急情况下,必须引入中心化检查。 操作:将泄露的 Token 唯一标识(通常是 jti 载荷)或整个 Token 字符串存入 Redis 等极速缓存中,并设置过期时间(等于该 Token 的剩余有效期)。 逻辑更新:修改后端的鉴权中间件,在校验 JWT 签名通过后,额外多一步检查:“该 Token 是否在 Redis 黑名单中?”。如果在,则拒绝请求。 优点:秒级生效,精准拦截。 2. 变更签名密钥(最彻底但代价大) 如果怀疑是大规模泄露,或者加密私钥(Secret Key)本身已暴露: 操作:立即在服务端更换用于签署 JWT 的 Secret Key。 后果:由于密钥变了,之前所有基于旧密钥生成的 Token(包括合法用户的)都会瞬间失效。 适用场景:密钥泄露或遭受系统性攻击。虽然这会导致全服用户强制下线(需重新登录),但在极端安全风险下是必要的“熔断”。 3. 强制用户重新登录:变更 User Secret 如果你的 JWT 签名逻辑中引入了用户特有的变量(例如:HMAC256(payload, base_secret + user_password_hash)): ...