当前位置: 首页 > article >正文

《白帽子讲Web安全》学习:深入解析Cookie与会话安全

目录

导言

一、Cookie 的原理与作用

二、Cookie 面临的安全风险

三、Cookie的核心安全属性

1.Domain 属性

2.Path 属性

3.Expires 属性

4.HttpOnly 属性

5.Secure 属性

6.SameSite 属性

7.SameParty 属性

四、安全使用Cookie

1.正确设置Cookie属性值

2.Cookie前缀

3.保密性和完整性

五、会话安全

1.会话管理

(1)会话ID的随机性:

(2)过期和失效:

(3)绑定客户端:

(4)安全传输:

(5)客户端存储会话:

2.固定会话攻击

(1)攻击者获取Session ID:

(2)强制用户使用该Session ID:

(3)劫持用户会话(Session Hijacking):


导言


最近在学习吴翰清老师的《白帽子讲Web安全》,书中对Web安全的核心问题进行了系统梳理。其中Cookie与会话安全作为Web安全的基石之一,让我深刻认识到:一个看似简单的Cookie,背后可能隐藏着巨大的安全风险。本文结合书中内容和个人实践,总结Cookie与会话安全的核心知识点,并探讨如何在实际开发中规避常见漏洞。


一、Cookie 的原理与作用

首先书中先介绍了何为Cookie:Cookie 是服务器发给用户浏览器上的一小段数据,浏览器会存储这些数据,用于识别用户身份、记录用户偏好等,并在后续发往服务器的请求中带上Cookie。它就像一个随身携带的 “小账本”,在用户浏览网页的过程中,帮助服务器 “记住” 用户的相关信息,从而提供更个性化的服务。比如,当我们再次访问常逛的购物网站时,页面能自动显示我们的历史浏览记录和收藏商品,这背后离不开 Cookie 的作用。


二、Cookie 面临的安全风险

Cookie是Web应用实现用户状态管理的关键技术,常用于存储会话标识(Session ID)、用户偏好等信息。但是Cookie 的广泛应用也带来了诸多安全风险。攻击者可以通过各种手段窃取用户的 Cookie,进而伪装成用户身份,获取敏感信息或进行恶意操作。

如:

  • 跨站脚本攻击(XSS):攻击者能注入恶意脚本,在用户不知情的情况下获取其 Cookie。
  •  Cookie 窃听:在不安全的网络环境中,如公共 Wi-Fi,攻击者可以监听并截获 Cookie 数据。

Cookie的以下特性也使其成为攻击者的重点目标:

  1. 客户端存储:Cookie存储在浏览器端,可能被篡改或窃取。
  2. 自动携带:浏览器会在每次请求中自动附加Cookie,易被中间人劫持。
  3. 明文传输:未加密的Cookie可能被网络嗅探工具捕获。

三、Cookie的核心安全属性


书中介绍了cookie的一些重要属性,通过合理设置Cookie属性,可显著提升安全性:

1.Domain 属性

定义:指定了 Cookie 可以被哪些域名访问。只有当浏览器请求的域名与 Cookie 的 Domain 属性匹配时,浏览器才会在请求中包含该 Cookie。

作用:用于实现跨子域共享 Cookie。例如,设置Domain=.example.com,那么www.example.comblog.example.com等子域都可以访问该 Cookie,方便在同一域名的不同子域之间共享用户信息等。

2.Path 属性

定义:指定了 Cookie 在服务器上的路径。只有当请求的 URL 路径与 Cookie 的 Path 属性匹配时,浏览器才会发送该 Cookie。

作用:可以限制 Cookie 的访问范围。比如,设置Path=/admin,那么只有在访问/admin路径下的页面时,浏览器才会发送该 Cookie,有助于提高 Cookie 的安全性和管理效率,避免不必要的 Cookie 在不相关的路径中被发送。

3.Expires 属性

定义:指定了 Cookie 的过期时间,是一个具体的日期和时间。当浏览器到达这个时间点后,就会自动删除该 Cookie。

作用:用于控制 Cookie 的生命周期。例如,设置Expires=Thu, 01 Jan 2030 00:00:00 GMT,表示 Cookie 在 2030 年 1 月 1 日过期。如果不设置该属性,Cookie 通常在浏览器关闭时就会被删除,即成为会话 Cookie。

4.HttpOnly 属性

定义:设置了该属性的 Cookie 不能被客户端脚本(如 JavaScript)访问,只能通过 HTTP 协议由服务器进行读写操作。

作用:主要用于防止跨站脚本攻击(XSS)。攻击者无法通过脚本获取带有HttpOnly属性的 Cookie,从而降低了 Cookie 被窃取和利用的风险,提高了 Cookie 的安全性。

5.Secure 属性

定义:标记为Secure的 Cookie 只会在使用 HTTPS 协议加密的连接中发送到服务器,在 HTTP 连接中不会被发送。

作用:确保 Cookie 在传输过程中的保密性和完整性,防止 Cookie 在网络传输过程中被窃取或篡改。因为 HTTPS 对数据进行了加密,所以可以有效保护Secure属性的 Cookie 安全。

6.SameSite 属性

定义:用于限制第三方 Cookie,它有三个可选值:StrictLaxNone

作用Strict模式下,Cookie 仅在同站请求时发送,跨站请求不会携带 Cookie,安全性最高;Lax模式相对宽松,允许一些安全的跨站导航请求携带 Cookie,如链接跳转等;None则允许跨站请求发送 Cookie,但需要同时设置Secure属性。该属性主要用于防止跨站请求伪造(CSRF)攻击和用户跟踪等问题。

7.SameParty 属性

定义:该属性用来标识 Cookie 是否属于同一 “party”。具有相同SameParty属性值的 Cookie 可以在跨站点的情况下共享,前提是符合相关的浏览器策略和安全机制。

作用:在一些复杂的跨站点交互场景中,比如在不同站点但属于同一组织或关联业务之间,需要共享某些用户状态或数据时,SameParty属性可以提供一种相对安全和可控的方式来实现 Cookie 的共享,同时也有助于减少跨站跟踪的风险,增强用户隐私保护。

属性名称属性值描述作用
Domain域名指定 Cookie 可以被哪些域名访问用于实现跨子域共享 Cookie
Path路径指定 Cookie 在服务器上的路径限制 Cookie 的访问范围
Expires日期时间指定 Cookie 的过期时间控制 Cookie 的生命周期
HttpOnly无(布尔值)设置该属性的 Cookie 不能被客户端脚本访问防止跨站脚本攻击(XSS)
Secure无(布尔值)标记为 Secure 的 Cookie 只会在 HTTPS 连接中发送确保 Cookie 传输安全,防止被窃取或篡改
SameSiteStrict/Lax/None限制第三方 Cookie 的发送规则防止跨站请求伪造(CSRF)攻击和用户跟踪
SameParty字符串值标识 Cookie 是否属于同一 “party”在跨站点场景下实现安全可控的 Cookie 共享,增强隐私保护

四、安全使用Cookie

书中还给出了如何安全使用Cookie的分析:

1.正确设置Cookie属性值

在Web应用中安全使用Cookie时正确设置属性值十分重要,包括:

  • 关键Cookie应设置Secure属性以确保在加密网络中传输;
  • 若无需子域名读取Cookie,植入时可不设Domain属性,若要与子域名网站共享状态需评估安全性;
  • 重要Cookie应设置HttpOnly属性,减少被客户端JavaScript读取的风险;
  • 与会话有关且不被其他站点引用的Cookie,建议设置SameSite属性为LAX,且不能依赖浏览器默认值,应在应用中显式指定 。

2.Cookie前缀

存在子域名的网站中,每个站点都可以写入一个让所有子域名都可见的Cookie,以至于每个站点都无法确定一个Cookie是不是自己写入的,如果其中的一个子域名站点存在安全漏洞,就会影响到其他的子域名站点,由此,浏览器给出了“为Cookie名称添加特定的前缀”的解决方案。
 

  •  __Host前缀:若Cookie名称含此前缀,由服务端通过Set - Cookie头或前端脚本设置时,需满足带有Secure属性、不包含Domain属性、Path属性为“/”且当前为HTTPS连接这4个条件,浏览器才会接受。它将Cookie跟域名绑定,仅限当前域名植入,对子域名无效。
  • __Secure前缀:含此前缀的Cookie,只有在带Secure属性且当前连接为HTTPS时,浏览器才会接受 ,是约束更少的弱化版本,能确保在安全连接环境下写入。主流浏览器(除IE外)支持Cookie前缀特性,为保证Cookie在安全环境传输,可加“__Secure-”前缀;子域名多且安全不受控时,关键Cookie建议加“__Host-”前缀 。

3.保密性和完整性

由于Cookie对用户是完全公开的,使用浏览器的开发者工具可以查看到,这就意味着Web服务端不能将自身的机密性数据写入Cookie。


五、会话安全

Web应用中,Cookie的本质是标识不同的访问者,并记录状态,攻击者如果窃取到一个合法的会话标识或者伪造会话标识,都相当于盗取了一个账号的身份,如果服务端管理不当,有可能造成数据泄露等问题。

1.会话管理

书中从几个方面介绍了会话的安全管理:

(1)会话ID的随机性:

会话ID(Session ID)是会话管理的核心,用于标识用户的会话状态。如果会话ID可预测或重复使用,攻击者可能通过猜测或重放攻击劫持用户会话,必须使用强随机数(如CSPRNG),避免可预测性,避免使用时间戳或用户ID拼接生成Session ID。

(2)过期和失效:

会话的过期和失效机制是防止会话固定攻击和会话劫持的关键。如果会话长期有效,攻击者可能利用泄露的Session ID劫持用户会话。

(3)绑定客户端:

绑定客户端信息(如IP地址、User-Agent)可以增加会话的安全性,防止攻击者通过窃取的Session ID在其他设备上使用。

(4)安全传输:

会话数据在传输过程中可能被窃取或篡改,因此必须确保其安全传输。

(5)客户端存储会话:

客户端存储会话数据(如JWT)可以减少服务器端的存储压力,但也带来了安全风险,服务端会话数据应存储在安全位置(如Redis、数据库),而非客户端。

2.固定会话攻击

固定会话攻击:攻击者诱导用户使用攻击者指定的Session ID,当受害者登录成功后,这个Session ID就关联了受害者的身份,相当于攻击者拥有了受害者在目标网站的身份。攻击者实现固定会话攻击的方式多种多样:

(1)攻击者获取Session ID

攻击者通过某种方式(如诱导用户访问恶意链接)获取一个有效的Session ID。

防御措施:登录成功后重新生成Session ID。

(2)强制用户使用该Session ID

攻击者诱导用户使用该Session ID登录系统。

(3)劫持用户会话(Session Hijacking):

通过XSS或网络嗅探窃取Session ID,用户登录后,攻击者利用已知的Session ID冒充用户,访问其账户。

防御:

  • 设置`HttpOnly`和`Secure`属性。
  • 使用HTTPS加密通信。
  • 定期轮换Session ID。

六、总结思考

Cookie作为Web应用中用户身份验证和状态管理的核心机制,其安全性直接影响系统的整体安全。书中指出,Cookie的客户端存储特性使其容易受到XSS、CSRF等攻击,因此必须通过设置HttpOnlySecureSameSite等属性来增强安全性。此外,会话管理中的Session ID生成、过期机制、客户端绑定和安全传输也是防御会话劫持和固定攻击的关键。通过合理配置Cookie属性、使用强随机数生成Session ID、绑定客户端信息以及强制HTTPS传输,可以有效提升Web应用的安全性。书中还强调了持续关注安全标准和团队培训的重要性,以确保开发实践符合最新的安全要求。


欢迎在评论区交流你的Cookie安全实践心得!


http://www.kler.cn/a/562007.html

相关文章:

  • 玩机日记 14 飞牛fnOS部署qBittorrent、AList、Jellyfin,实现下载、存取、刮削、观看一体的家庭影音中心
  • 【Python爬虫(55)】Scrapy进阶:深入剖析下载器与下载中间件
  • 物理服务器如何保障数据的安全性?
  • Qt常用控件之单行输入框QLineEdit
  • Vue进阶之AI智能助手项目(四)——ChatGPT的调用和开发
  • 在Linux、Windows和macOS上部署DeepSeek模型的最低配置要求
  • 2021Java面试-基础篇
  • STM32【3】芯片的底层组成概论
  • Kafka可视化工具EFAK(Kafka-eagle)安装部署
  • OpenCV(9):视频处理
  • Linux 第三次脚本作业
  • HBase:大数据时代的“超级数据库”
  • 分布式之Gossip协议
  • 设计模式 简单汇总
  • java-阶乘
  • ​第十一届传感云和边缘计算系统 (SCECS 2025)
  • html css js网页制作成品——HTML+CSS甜品店网页设计(5页)附源码
  • LINUX、WIN32、MACOSX多个平台上GCC、MSVC之间结构体按序列大小1字节对齐
  • mongodb常用操作命令
  • 【IEEE出版,往届会后3个月EI检索 | 西华大学主办 | 中英文期刊、SCI期刊推荐】第四届能源、电力与电气国际学术会议(ICEPET 2025)