应用安全:会话防劫持
字数 1316 2025-08-15 21:31:42

会话防劫持技术详解

1. 背景与重要性

失效的身份认证在OWASP TOP 10 2017版中排名第二,主要包括:

  • 错误使用应用程序的身份认证和会话管理功能
  • 攻击者能够破译密码、密钥或会话令牌
  • 利用开发缺陷冒充其他用户身份

会话令牌劫持是失效身份认证的关键因素,必须采取有效措施防范。

2. 核心概念

2.1 Session(会话)

  • 为解决HTTP无状态协议问题而设计
  • 维护用户状态,关联用户信息
  • 典型工作流程:
    1. 用户使用账号+密码/手机号+验证码登录
    2. 后台验证通过后在Redis会话表产生记录
    3. 记录包含随机唯一值(sessionId)和用户信息
    4. sessionId返回给客户端保存
    5. 后续接口通过sessionId进行鉴权

2.2 Token(令牌)

  • 用户身份的验证方式
  • 典型组成:uid(用户唯一标识)、time(时间戳)、sign(签名)
  • 与Session的关键区别:
    • Token状态保存在客户端
    • 后台不需要保存状态
    • 自带用户基本信息、过期时间等
    • 后台收到后直接解密校验

3. 会话令牌劫持攻击方式

3.1 获取SessionID的方法

  1. 暴力破解:尝试各种Session ID直到成功
  2. 预测
    • 分析非随机生成的SessionID强度(长度、字符集、信息量)
    • 使用工具如Burp Suite的Sequencer模块分析
  3. 捕获(劫持)
    • 网络嗅探
    • XSS攻击
  4. 会话固定攻击(Session Fixation)
    • 攻击者预先计算SessionID
    • 诱使用户使用此SessionID登录
    • 使该SessionID合法化

4. 防劫持综合方案

4.1 会话令牌生成

  • 使用安全随机函数:
    • /dev/urandom
    • security.SecureRandom
    • CryptGenRandom
  • 会话标识要求:
    • 包含字母和数字
    • 长度不少于32个字符

4.2 会话令牌有效期控制

  • WEB服务:不超过4小时
  • 手机/PC客户端:不超过7天

4.3 会话令牌传输安全

  1. 信道加密
    • 使用HTTPS传输会话令牌
  2. Cookie属性设置
    Set-Cookie: foo=bar; Path=/; Secure; HttpOnly
    
    • HttpOnly:防止客户端脚本访问Cookie,防范XSS攻击
    • Secure:防止会话令牌通过HTTP传输

4.4 会话令牌使用规范

  1. 传输方式
    • 不通过URL传输会话令牌
  2. 信息保护
    • 关闭dump request信息的页面
      • 如phpinfo页面
      • Spring Boot Actuator的trace endpoint
  3. 一致性检测
    • User-Agent检测
      • 当User-Agent和客户端IP同时变化时
      • 使会话令牌失效,要求重新登录
    • MAC地址检测
      • 当客户端MAC地址变化时
      • 使会话令牌失效,要求重新登录
  4. 会话令牌更新
    • 登录前和登录后使用不同的会话令牌

5. 实施建议

  1. 开发阶段

    • 将会话安全要求纳入开发规范
    • 使用标准库生成会话标识
    • 实现自动化的会话管理机制
  2. 测试阶段

    • 进行会话安全性专项测试
    • 使用工具模拟会话劫持攻击
    • 验证各项防护措施的有效性
  3. 运维阶段

    • 定期检查会话配置
    • 监控异常会话活动
    • 及时更新会话安全策略

通过以上综合措施,可有效防范会话令牌劫持攻击,保障系统身份认证安全。

会话防劫持技术详解 1. 背景与重要性 失效的身份认证在OWASP TOP 10 2017版中排名第二,主要包括: 错误使用应用程序的身份认证和会话管理功能 攻击者能够破译密码、密钥或会话令牌 利用开发缺陷冒充其他用户身份 会话令牌劫持是失效身份认证的关键因素,必须采取有效措施防范。 2. 核心概念 2.1 Session(会话) 为解决HTTP无状态协议问题而设计 维护用户状态,关联用户信息 典型工作流程: 用户使用账号+密码/手机号+验证码登录 后台验证通过后在Redis会话表产生记录 记录包含随机唯一值(sessionId)和用户信息 sessionId返回给客户端保存 后续接口通过sessionId进行鉴权 2.2 Token(令牌) 用户身份的验证方式 典型组成:uid(用户唯一标识)、time(时间戳)、sign(签名) 与Session的关键区别: Token状态保存在客户端 后台不需要保存状态 自带用户基本信息、过期时间等 后台收到后直接解密校验 3. 会话令牌劫持攻击方式 3.1 获取SessionID的方法 暴力破解 :尝试各种Session ID直到成功 预测 : 分析非随机生成的SessionID强度(长度、字符集、信息量) 使用工具如Burp Suite的Sequencer模块分析 捕获(劫持) : 网络嗅探 XSS攻击 会话固定攻击(Session Fixation) : 攻击者预先计算SessionID 诱使用户使用此SessionID登录 使该SessionID合法化 4. 防劫持综合方案 4.1 会话令牌生成 使用安全随机函数: /dev/urandom security.SecureRandom CryptGenRandom 会话标识要求: 包含字母和数字 长度不少于32个字符 4.2 会话令牌有效期控制 WEB服务:不超过4小时 手机/PC客户端:不超过7天 4.3 会话令牌传输安全 信道加密 : 使用HTTPS传输会话令牌 Cookie属性设置 : HttpOnly:防止客户端脚本访问Cookie,防范XSS攻击 Secure:防止会话令牌通过HTTP传输 4.4 会话令牌使用规范 传输方式 : 不通过URL传输会话令牌 信息保护 : 关闭dump request信息的页面 如phpinfo页面 Spring Boot Actuator的trace endpoint 一致性检测 : User-Agent检测 : 当User-Agent和客户端IP同时变化时 使会话令牌失效,要求重新登录 MAC地址检测 : 当客户端MAC地址变化时 使会话令牌失效,要求重新登录 会话令牌更新 : 登录前和登录后使用不同的会话令牌 5. 实施建议 开发阶段 : 将会话安全要求纳入开发规范 使用标准库生成会话标识 实现自动化的会话管理机制 测试阶段 : 进行会话安全性专项测试 使用工具模拟会话劫持攻击 验证各项防护措施的有效性 运维阶段 : 定期检查会话配置 监控异常会话活动 及时更新会话安全策略 通过以上综合措施,可有效防范会话令牌劫持攻击,保障系统身份认证安全。