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

《白帽子讲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安全实践心得!

相关文章:

  • 银河麒麟高级服务器操作系统在线调整/pro/{PID}/limits文件中nofile的软限制和硬限制参数值操作方法
  • 设计模式-结构性模式
  • QARepVGG--含demo实现
  • 手写系列——MoE网络
  • 【算法系列】归并排序详解
  • Spring Boot集成RocketMQ:真实项目应用场景
  • VMware虚拟机安装win10系统详细图文安装教程(附安装包) 2025最新版详细图文安装教程
  • C++day6
  • 【MyBatis】带你快速掌握 —— CRUD
  • deepseek 学习资料整理
  • 直击高频编程考点:聚焦新版综合编程能力考查汇总
  • 【nginx】:给nginx增加 password 配置通过简单的方式限制登陆。使用openssl 生成密码
  • 个人电脑小参数GPT预训练、SFT、RLHF、蒸馏、CoT、Lora过程实践——MiniMind图文版教程
  • 用AI学习RPA——机器人流程自动化实现路径1
  • springboot实现多文件上传
  • 3DM转换成OBJ
  • ultralytics导出engine之后,用tensorrt c++ api加载报Serialization failed
  • 【Python爬虫(59)】解锁学术文献网站数据爬取:从登录到知识图谱构建
  • [算法--前缀和] 矩阵区域和
  • 【Golang】go语言异常处理快速学习
  • AI赋能科学红毯,机器人与科学家在虚实之间叩问“科学精神”
  • 马上评|训斥打骂女儿致死,无暴力应是“管教”底线
  • 上海高院与上海妇联签协议,建立反家暴常态化联动协作机制
  • 伊朗最高领袖顾问:伊朗愿承诺永不制造核武,换取美解除制裁
  • 习近平复信中国丹麦商会负责人
  • 秘鲁总理辞职