【缺陷周话】第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未加密而导致的安全风险,保护用户会话和敏感数据的安全。

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) 问题分析 : 应用程序同时使用HTTPS和HTTP 未设置secure标记 HTTPS请求中发送的Cookie也会在随后的HTTP请求中被发送 通过未加密连接传输敏感信息危及安全 3.2 修复方案 修复要点 : 显式设置 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未加密而导致的安全风险,保护用户会话和敏感数据的安全。