应用安全:会话防劫持
字数 1316 2025-08-15 21:31:42
会话防劫持技术详解
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属性设置:
Set-Cookie: foo=bar; Path=/; Secure; HttpOnly- HttpOnly:防止客户端脚本访问Cookie,防范XSS攻击
- Secure:防止会话令牌通过HTTP传输
4.4 会话令牌使用规范
- 传输方式:
- 不通过URL传输会话令牌
- 信息保护:
- 关闭dump request信息的页面
- 如phpinfo页面
- Spring Boot Actuator的trace endpoint
- 关闭dump request信息的页面
- 一致性检测:
- User-Agent检测:
- 当User-Agent和客户端IP同时变化时
- 使会话令牌失效,要求重新登录
- MAC地址检测:
- 当客户端MAC地址变化时
- 使会话令牌失效,要求重新登录
- User-Agent检测:
- 会话令牌更新:
- 登录前和登录后使用不同的会话令牌
5. 实施建议
-
开发阶段:
- 将会话安全要求纳入开发规范
- 使用标准库生成会话标识
- 实现自动化的会话管理机制
-
测试阶段:
- 进行会话安全性专项测试
- 使用工具模拟会话劫持攻击
- 验证各项防护措施的有效性
-
运维阶段:
- 定期检查会话配置
- 监控异常会话活动
- 及时更新会话安全策略
通过以上综合措施,可有效防范会话令牌劫持攻击,保障系统身份认证安全。