【缺陷周话】第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);

问题分析

  1. 应用程序同时使用HTTPS和HTTP
  2. 未设置secure标记
  3. HTTPS请求中发送的Cookie也会在随后的HTTP请求中被发送
  4. 通过未加密连接传输敏感信息危及安全

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 最佳实践

  1. 始终为敏感Cookie设置secure标记
  2. 在HTTPS环境中强制使用secure标记
  3. 考虑同时设置HttpOnly属性防止XSS攻击
  4. 合理设置Cookie过期时间

4.2 实施建议

  • 代码审查时检查所有Cookie创建点
  • 使用静态分析工具检测此类缺陷
  • 在生产环境中强制HTTPS
  • 定期安全测试验证Cookie安全配置

5. 检测与验证

5.1 检测方法

  1. 静态代码分析:检查所有Cookie创建点是否设置secure属性
  2. 动态测试
    • 使用代理工具检查Set-Cookie头
    • 验证secure标志是否存在
  3. 自动化扫描:使用专业安全扫描工具检测

5.2 验证要点

  • 通过HTTPS请求时Cookie是否正常传输
  • 通过HTTP请求时Cookie是否被阻止
  • 浏览器开发者工具中检查Cookie属性

6. 扩展知识

6.1 相关安全属性

  • HttpOnly:防止JavaScript访问Cookie,防御XSS
  • SameSite:控制跨站请求时Cookie的发送行为
  • Domain/Path:限制Cookie的作用域

6.2 安全开发建议

  1. 将Cookie安全纳入SDL(安全开发生命周期)
  2. 在DevSecOps流程中加入自动化安全检查
  3. 对开发人员进行安全编码培训
  4. 建立安全编码规范,包含Cookie安全要求

通过全面实施这些安全措施,可以显著降低因Cookie未加密而导致的安全风险,保护用户会话和敏感数据的安全。

相似文章
相似文章
 全屏