【缺陷周话】第42期:Cookie: 未经过 SSL 加密
字数 1356 2025-08-18 11:38:49
Cookie安全:SSL加密与Secure属性详解
1. 缺陷概述
CWE ID: 614 (Sensitive Cookie in HTTPS Session Without 'Secure' Attribute)
缺陷描述:当创建Cookie时未将secure标记设置为true,Cookie会通过未加密的通道(HTTP)发送,使其容易受到网络截取攻击。设置secure标记后,浏览器只会通过HTTPS发送Cookie,确保其保密性。
2. 安全风险
2.1 潜在危害
- 攻击者可窃取或操纵客户会话和Cookie
- 可能被用于模仿合法用户
- 攻击者可以查看/变更用户记录
- 能够以用户身份执行事务
2.2 相关漏洞统计
从2018年1月至2019年7月,CVE中共有202条漏洞与此缺陷相关。
典型案例:
- CVE-2018-5482:NetApp SnapCenter服务器未为敏感cookie设置secure标志
- CVE-2018-1948:IBM Security Identity Governance未在授权令牌/cookie上设置安全属性
- CVE-2018-1340:Apache Guacamole会话令牌cookie缺少secure标志
3. 技术分析
3.1 缺陷代码示例(Java)
// 创建Cookie对象
Cookie cookie = new Cookie("access_token", token);
// 未设置secure属性
response.addCookie(cookie);
问题分析:
- 应用程序同时使用HTTPS和HTTP
- 未设置secure标记
- HTTPS请求中发送的Cookie也会在随后的HTTP请求中被发送
- 通过未加密连接传输敏感信息危及安全
3.2 修复方案
// 创建Cookie对象
Cookie cookie = new Cookie("access_token", token);
// 设置secure属性为true
cookie.setSecure(true);
response.addCookie(cookie);
修复要点:
- 显式设置
cookie.setSecure(true) - 确保Cookie仅通过HTTPS传输
- 防止Cookie在HTTP请求中泄露
4. 防御措施
4.1 最佳实践
- 始终为敏感Cookie设置secure标记
- 在HTTPS环境中强制使用secure标记
- 考虑同时设置HttpOnly属性防止XSS攻击
- 合理设置Cookie过期时间
4.2 实施建议
- 代码审查时检查所有Cookie创建点
- 使用静态分析工具检测此类缺陷
- 在生产环境中强制HTTPS
- 定期安全测试验证Cookie安全配置
5. 检测与验证
5.1 检测方法
- 静态代码分析:检查所有Cookie创建点是否设置secure属性
- 动态测试:
- 使用代理工具检查Set-Cookie头
- 验证secure标志是否存在
- 自动化扫描:使用专业安全扫描工具检测
5.2 验证要点
- 通过HTTPS请求时Cookie是否正常传输
- 通过HTTP请求时Cookie是否被阻止
- 浏览器开发者工具中检查Cookie属性
6. 扩展知识
6.1 相关安全属性
- HttpOnly:防止JavaScript访问Cookie,防御XSS
- SameSite:控制跨站请求时Cookie的发送行为
- Domain/Path:限制Cookie的作用域
6.2 安全开发建议
- 将Cookie安全纳入SDL(安全开发生命周期)
- 在DevSecOps流程中加入自动化安全检查
- 对开发人员进行安全编码培训
- 建立安全编码规范,包含Cookie安全要求
通过全面实施这些安全措施,可以显著降低因Cookie未加密而导致的安全风险,保护用户会话和敏感数据的安全。