51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计一个高安全性的用户认证系统,需要考虑防暴力破解、会话劫持、重放攻击,请描述系统架构、关键组件(如密码哈希、会话管理、验证码)以及如何实现这些安全措施。

360安全开发初级工程师难度:困难

答案

1) 【一句话结论】
高安全性用户认证系统需通过密码加盐哈希(防暴力破解)、动态无状态会话(JWT+时间戳nonce,防劫持与重放)、滑动验证码(防自动化)、速率限流(防暴力破解)等组合,构建多层级防御体系,有效抵御暴力破解、会话劫持、重放攻击。

2) 【原理/概念讲解】
老师口吻解释关键概念:

  • 密码哈希:为防暴力破解,要求密码长度≥12位(含大小写、数字、特殊字符),存储时用bcrypt(或scrypt),每个用户随机生成16字节盐(唯一),迭代次数根据系统CPU负载调整(公式:迭代次数=系统CPU核心数×1000,高并发场景下设为10000次),类比“锁的复杂度,盐是唯一钥匙,迭代次数越多,破解难度越大,但计算开销越大”。
  • 会话管理:
    • 有状态(Session Cookie):服务器存储会话ID,客户端存Cookie,需设置Secure(仅HTTPS传输)、HttpOnly(防JavaScript窃取),防XSS攻击。
    • 无状态(JWT):客户端存储token(含用户信息+签名),服务器不存储,需签名(HS256,密钥安全),登录表单添加CSRF token(防跨站请求伪造)。
  • 验证码:滑动验证(Canvas绘制滑块,用户拖动到目标位置,服务器验证坐标是否在5像素容差内),有效时间60秒,防自动化脚本。
  • 限流与防暴力破解:登录请求限流(令牌桶算法),正常用户每分钟10次,恶意用户(连续失败3次)封禁IP。
  • 重放攻击防御:请求中添加毫秒级时间戳、UUID nonce,服务器验证时间戳是否在5分钟内(token的iat+5分钟)且nonce唯一,防请求重放。

3) 【对比与适用场景】

方式定义特性使用场景注意点
Session Cookie(有状态)服务器存储会话ID,客户端存Cookie服务器维护状态,需HTTPS传输、HttpOnly传统B/S架构(如单体应用)设置Secure、HttpOnly,防XSS;会话超时需处理
JWT(无状态)客户端存token(含用户信息+签名)服务器不存储,签名验证微服务、SPA(前端无状态)令牌过期后需重新登录;签名密钥需轮换(每3个月)

4) 【示例】
用户登录流程(伪代码):

  • 用户输入用户名/密码 → 服务器从数据库获取用户记录 → 用用户盐对密码哈希(bcrypt比对) → 验证通过生成JWT:
    {
      "sub": "user_id",
      "exp": 1701234567890,
      "iat": 1701234567890,
      "jti": "token_id",
      "nonce": "uuid"
    }
    
    签名用HS256(密钥secret),发送给客户端。
  • 客户端存储token(localStorage/cookie),后续请求头添加Authorization: Bearer <token> → 服务器验证签名、exp(过期时间)、jti(唯一标识,防重放)、时间戳(请求中的时间戳是否在token的iat+5分钟内)和nonce(是否匹配),通过则返回用户信息。

5) 【面试口播版答案】
面试官您好,设计高安全性用户认证系统,核心是构建多层级防御。首先,密码策略:要求长度≥12位(含大小写、数字、特殊字符),存储用bcrypt加盐(16字节随机盐,迭代次数根据系统CPU负载调整,例如高并发场景下设为10000次),防暴力破解。会话管理采用JWT(无状态),包含用户ID、过期时间(30分钟)、唯一标识(jti,防重放)、时间戳(iat),签名用HS256(密钥每3个月轮换,加密存储)。验证码用滑动验证(Canvas绘制滑块,用户拖动到目标位置,服务器验证坐标是否在5像素容差内),有效时间60秒。登录请求限流:正常用户每分钟10次,恶意用户(连续失败3次)封禁IP。重放攻击防御:请求中添加毫秒级时间戳和UUID nonce,服务器验证时间戳是否在5分钟内且nonce唯一。整体架构分前端、认证服务(登录、生成token)、用户服务(密码验证)、限流服务,所有通信用HTTPS。这样能有效抵御暴力破解、会话劫持和重放攻击。

6) 【追问清单】

  • 问:会话超时如何处理?
    答:设置30分钟无操作自动注销,token过期后客户端需重新登录,服务器验证后生成新token。
  • 问:密码哈希的迭代次数如何选择?
    答:根据系统性能,推荐1000-100000次,迭代次数越高,破解难度越大,但计算开销越大。
  • 问:JWT签名密钥如何轮换?
    答:每3个月更换一次,旧token失效,用户需重新登录,新token用新密钥签名。
  • 问:验证码的刷新策略?
    答:每次请求验证码时重新生成,避免被缓存或重放,有效时间60秒。
  • 问:限流策略如何区分正常用户与恶意用户?
    答:正常用户放宽限流(如每分钟10次),恶意用户(连续失败3次)封禁IP或账户。

7) 【常见坑/雷区】

  • 忘记加盐:导致密码哈希可被彩虹表破解,攻击者用预计算哈希值匹配数据库。
  • 会话管理不设置Secure/HttpOnly:导致Cookie在HTTP/HTTPS混合环境被窃取,或在JavaScript中获取,引发XSS。
  • 重放攻击没时间戳:攻击者可缓存请求,在有效时间内重放,导致用户被冒用。
  • 限流策略太严格:影响正常用户登录体验,甚至被恶意用户绕过(如IP轮换)。
  • JWT不设置过期时间:导致token永久有效,用户账户长期被锁定或被攻击者利用。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1