剖析Cookie的工作原理及其安全风险

news2025/1/11 7:06:38

Cookie的工作原理主要涉及到HTTP协议中的状态管理。HTTP协议本身是无状态的,这意味着每次请求都是独立的,服务器不会保留之前的请求信息。为了在无状态的HTTP协议上实现有状态的会话,引入了Cookie机制。

1. Cookie定义

Cookie,也称为HTTP cookie、web cookie、互联网cookie或浏览器cookie,是一种用于在用户浏览网站时识别用户并为其准备网页的小型数据片段。它允许Web服务器跟踪用户的浏览历史并响应之前披露的偏好。可以增强用户体验,并基于过去的行为启用个性化内容。

Cookie通常以键值对的形式存储在用户的硬盘上,是一个二进制的Sqlite文件,Windows系统中Chrome浏览器的Cookie默认位置一般为C:\Users\me\AppData\Local\Google\Chrome\User Data\Default\Network

在这里插入图片描述

Cookie有多种类型,包括会话cookie和持久cookie。

  • 会话cookie仅在访问网站期间处理,用户退出浏览器会话cookie就被删除了;
  • 持久cookie则在网站会话结束后处理,存储在访问者的设备上,每次访问网站时都会激活。

2. Cookie的工作原理

默认情况下,每个请求都被视为新请求。通过在响应中添加Cookie来实现Cookie技术,从而将Cookie存储在浏览器缓存中。下次浏览器向该站点发送请求时,它会查找来自该域的cookie,如果找到,Cookie会被添加到该请求中。具体工作原理如下:

1) 客户端首次请求

当用户首次访问一个网站时,服务器会生成一个唯一的标识符(通常是一个随机的字符串),并通过HTTP响应头中的Set-Cookie字段将这个标识符发送给客户端。

设置Cookie

2)客户端存储Cookie

客户端接收到这个Cookie后,会将其存储在本地的sqlite文件中。这个Cookie通常包含了一些信息,如过期时间、域名、路径等。

cookie文件结构

用sql连接工具可以导出cookies的DDL语句,具体如下

create table cookies
(
    creation_utc            INTEGER not null,
    host_key                TEXT    not null,
    top_frame_site_key      TEXT    not null,
    name                    TEXT    not null,
    value                   TEXT    not null,
    encrypted_value         BLOB    not null,
    path                    TEXT    not null,
    expires_utc             INTEGER not null,
    is_secure               INTEGER not null,
    is_httponly             INTEGER not null,
    last_access_utc         INTEGER not null,
    has_expires             INTEGER not null,
    is_persistent           INTEGER not null,
    priority                INTEGER not null,
    samesite                INTEGER not null,
    source_scheme           INTEGER not null,
    source_port             INTEGER not null,
    last_update_utc         INTEGER not null,
    source_type             INTEGER not null,
    has_cross_site_ancestor INTEGER not null
);

create unique index cookies_unique_index
    on cookies (host_key, top_frame_site_key, has_cross_site_ancestor, name, path, source_scheme, source_port);

3) 客户端后续请求
之后,每当客户端向同一个服务器发送请求时,都会自动在HTTP请求头中包含这个Cookie。这样,服务器就能识别出这个请求是来自哪个客户端,从而实现会话管理。

4)服务器处理Cookie
服务器接收到包含Cookie的请求后,会解析这个Cookie,并根据其中的信息来处理请求。例如,服务器可以根据Cookie中的标识符来查找对应的会话数据,从而实现用户认证、个性化内容展示等功能。

3. Cookie的安全性问题及防护

为了保护用户隐私和数据安全,Cookies可以设置一些安全属性,如HttpOnly(防止JavaScript访问)、Secure(只在HTTPS连接中传输)等。此外,一些现代浏览器和操作系统也提供了额外的隐私保护机制,如隐私沙盒,来限制第三方Cookies的使用。

举例:https://segmentfault.com/网站的cookie只在HTTPS通道中传输

Cookie 的安全性主要涉及以下六点:

  • 1. 安全性级别

    • HTTP Only:这种属性可以防止JavaScript访问Cookie,从而阻止XSS(跨站脚本)攻击时利用Cookie获取敏感信息。

      若想了解XSS攻击的原理和防护可以参阅博主前期文章《「 典型安全漏洞系列 」01.跨站脚本攻击XSS详解》

    • Secure:标记为Secure的Cookie只能通过HTTPS协议传输,避免了在HTTP协议下传输Cookie时可能被中间人攻击截获的风险。

    • SameSite:用于限制Cookie的跨站点请求访问。分为SameSite=NoneSameSite=Lax两种,前者在任何情况下都不会通过跨站点请求发送Cookie,后者则在非直接请求时不会发送Cookie,可以有效防止CSRF(跨站请求伪造)攻击。

      若想了解CSRF攻击的原理和防护可以参阅博主前期文章《「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解》

  • 2. 生命周期:Cookie的生命周期由其过期时间决定。默认情况下,Cookie会在浏览器关闭时失效。开发者可以通过设置Max-Age或Expires属性来延长Cookie的生命周期,但这也增加了被窃取的风险。

  • 3. 内容加密:为了保护Cookie内容不被窃取,可以对Cookie内容进行加密。这种方法需要客户端和服务器端共享密钥,以确保数据在传输过程中的安全性。

  • 4. 会话管理:使用Cookie进行会话管理时,需要确保Cookie的名称、值、过期时间等设置得当,避免使用过于明显的名称或容易猜测的值,防止被猜测或重放攻击。

  • 5. 第三方Cookie:第三方Cookie(由当前网站之外的其他网站设置的Cookie)增加了隐私风险。为了保护用户隐私,现代浏览器开始限制第三方Cookie的使用,如Chrome浏览器的“隐私沙盒”计划。

  • 6. 同源策略(SOP):浏览器的同源策略限制了不同来源的网站之间不能共享Cookie信息,除非通过特定的HTTP头部(如Access-Control-Allow-Credentials)允许。这有助于保护用户隐私和数据安全。

    若想了解同源的原理和防护可以参阅博主前期文章《同源策略SOP详解》

4. 总结

Cookie通过在用户的浏览器和Web服务器之间传递小段数据来工作,允许服务器识别用户并为其准备个性化的网页内容。Cookie在提供连续的用户体验和跟踪用户偏好方面起着关键作用。

Cookie的安全性需要通过合理的配置和管理来保障。开发者应根据实际应用场景选择合适的设置,以保护用户数据安全。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2112654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EMC测试

传导干扰测试: 现场实录CE传导骚扰电压测试,硬件环境: R&S EPL1000 EMI测量接收机(支持时域测试) R&S ENV216人工电源网络 R&S ELEKTRA 测试软件 黑色底板,不写丝印,0402封装平行排…

Tomcat服务详解

一、部署Tomcat服务器 JDK安装官方网址:https://www.oracle.com/cn/java Tomcat安装官方网址:Apache Tomcat - Welcome! 安装JDK 1.获取安装包 wget https://download.oracle.com/otn/java/jdk/8u411-b09/43d62d619be4e416215729597d70b8ac/jdk-8u41…

【工程测试技术】第13章 流体参量测量

目录 第13章 流体参量测量 13.1压力的测量 13.1.1 弹性式压力敏感元件 1. 波登管 2. 膜片和膜盒 3. 波纹管 13.1.2 常用压力传感器 1. 应变式压力传感器 2. 压阻式压力传感器 3. 压电式压力传感器 4. 电容式压力传感器 5. 谐振式压力传感器 6. 位移式压力传感器 (1)…

整型数组按个位值排序

题目描述 给定一个非空数组(列表),其元素数据类型为整型,请按照数组元素十进制最低位从小到大进行排序,十进制最低位相同的元司 相对位置保持不变。 当数组元素为负值时,十进制最低位等同于去除符号位后对应十进制值最低位。 输…

吐血整理 ChatGPT 3.5/4.0 新手使用手册~ 【2024.09.04 更新】

以前我也是通过官网使用,但是经常被封号,就非常不方便,后来有朋友推荐国内工具,用了一阵之后,发现:稳定方便,用着也挺好的。 最新的 GPT-4o、4o mini,可搭配使用~ 1、 最新模型科普&…

VisualStudio环境搭建C++

Visual Studio环境搭建 说明 C程序编写中,经常需要链接头文件(.h/.hpp)和源文件(.c/.cpp)。这样的好处是:控制主文件的篇幅,让代码架构更加清晰。一般来说头文件里放的是类的申明,函数的申明,全局变量的定义等等。源…

Java面试题·解释题·框架部分

系列文章目录 Java面试题解释题总体概括 Java面试题解释题JavaSE部分 Java面试题解释题框架部分 文章目录 系列文章目录前言一、MyBatis1. 请你介绍MyBatis框架2. MyBatis框架的核心思想是什么?3. MyBatis的核心配置文件中常用的子标签有哪些?4. mapper…

饲料加工机器设备有哪些组成部分

在快速发展的畜牧业中,饲料加工作为支撑养殖业的重要环节,其效率与品质直接影响着养殖业的成本效益与动物健康。随着科技的进步,饲料加工机器设备也在不断升级,为养殖行业带来了变革。一、智能化粉碎机:细度可调&#…

Unity Adressables 使用说明(五)在运行时使用 Addressables(Use Addressables at Runtime)

一旦你将 Addressable assets 组织到 groups 并构建到 AssetBundles 中,就需要在运行时加载、实例化和释放它们。 Addressables 使用引用计数系统来确保 assets 只在需要时保留在内存中。 Addressables 初始化 Addressables 系统在运行时第一次加载 Addressable …

SimD:基于相似度距离的小目标检测标签分配

摘要 https://arxiv.org/pdf/2407.02394 由于物体尺寸有限且信息不足,小物体检测正成为计算机视觉领域最具挑战性的任务之一。标签分配策略是影响物体检测精度的关键因素。尽管已经存在一些针对小物体的有效标签分配策略,但大多数策略都集中在降低对边界…

怎么利用XML发送物流快递通知短信

现如今短信平台越来越普遍了,而短信通知也分很多种,例如服务通知、订单通知、交易短信通知、会议通知等。而短信平台在物流行业通知这一块作用也很大。在家时:我们平时快递到了,如果电话联系不到本人,就会放到代收点,然…

正负极层数更新器

文件名:dcs_tkinter.py import tkinter as tk from tkinter import messagebox import redis# 连接Redis r redis.Redis(hostlocalhost, port6379, db0)def update_redis_and_display():try:# 从输入框获取值positive_layers int(entry_positive.get())negative_…

2024国赛数学建模C题论文:基于优化模型的农作物的种植策略

大家可以查看一下35页,包含结构完整,数据完整的C题论文,完整论文见文末名片 添加图片注释,不超过 140 字(可选) 添加图片注释,不超过 140 字(可选) 添加图片注释&#xf…

Nexus配置npm私服

1,配置npm-hub 2,配置proxy-npm 3,配置group-npm 4,配置local-npm 5,配置淘宝

Java语言程序设计基础篇_编程练习题**17.20 (二进制编辑器)

目录 题目:**17.20 (二进制编辑器) 代码示例 结果展示 题目:**17.20 (二进制编辑器) 编写一个GUI应用程序,让用户在文本域输入一个文件名,然后单击回车键,在文本区域显示它的二进制表示形式。用户也可以修改这个二…

每日一题~cf 970 div3 (A思维,B小模拟,C二分,D排列数建图成环,E 26个字母暴力+前缀和,F 逆元,G 数论gcd )

A 题意: 有 a 个1 ,b 个2.问是否能将这些数划分为两个数值相等的集合。 输出 YES 或者 NO —————— 问题等价于 将数组 分成两个数值相同的数组。所以sum 应该是偶数。也就是说 1 的个数是偶数。在i1的个数是偶数的情况下,将 2 分成两份,…

FreeRTOS学习笔记(二)任务基础篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、 任务的基本内容1.1 任务的基本特点1.2 任务的状态1.3 任务控制块——任务的“身份证” 二、 任务的实现2.1 定义任务函数2.2 创建任务2.3 启动任务调度器2…

TMGM:美国劳动力市场正常化,而非衰退

新的数据显示,美国劳动力市场的降温正在增强对美联储降息的信心,但目前对主要市场的影响尚未明朗。本周,劳动力市场成为焦点,因为它有能力决定美联储何时以及多大幅度地削减其关键利率。周五的官方非农就业报告将成为亮点&#xf…

探究零工市场小程序如何改变传统兼职模式

近年来,零工市场小程序正逐渐改变传统的兼职模式,为求职者和雇主提供了一个更为高效、便捷的平台。本文将深入探讨零工市场小程序如何影响传统兼职模式,以及它带来的优势和挑战。 一、背景与挑战 传统的兼职市场往往存在信息不对称的问题&am…

辉煌版单据的金额字段可以使用自定义公式

有些用户反馈,使用管家婆录入单据时,金额不是数量乘以单价,需要增加一些自定义字段参与,所以需要自定义金额的计算公式,这样原来的单价乘以数量就不能满足了。其实管家婆是支持自定义公式的,具体操作如下&a…