剖析Cookie的工作原理及其安全风险
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字段将这个标识符发送给客户端。
2)客户端存储Cookie
客户端接收到这个Cookie后,会将其存储在本地的sqlite文件中。这个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_indexon 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的使用。
Cookie 的安全性主要涉及以下六点:
-
1. 安全性级别:
-
HTTP Only:这种属性可以防止JavaScript访问Cookie,从而阻止XSS(跨站脚本)攻击时利用Cookie获取敏感信息。
若想了解XSS攻击的原理和防护可以参阅博主前期文章《「 典型安全漏洞系列 」01.跨站脚本攻击XSS详解》
-
Secure:标记为Secure的Cookie只能通过HTTPS协议传输,避免了在HTTP协议下传输Cookie时可能被中间人攻击截获的风险。
-
SameSite:用于限制Cookie的跨站点请求访问。分为
SameSite=None
和SameSite=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的安全性需要通过合理的配置和管理来保障。开发者应根据实际应用场景选择合适的设置,以保护用户数据安全。
相关文章:

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

规控面试复盘
目录 前言 一、京东方 1、CPP和C的区别是什么? 2、讲一下的ROS的话题通信 二、Momenta(泊车部门实习面试) 1、MPC的预测时间步是多少? 2、MPC的代价函数考虑的是什么? 三、九识 1、智能指针有哪些优缺点? 优点: 缺点: 2、Protobuf的数据传输效率为什么更高…...

Elastic Stack--ES集群加密及Kibana的RBAC实战
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 学习B站博主教程笔记: 最新版适合自学的ElasticStack全套视频(Elk零基础入门到精通教程)Linux运维必备—Elastic…...

【开源免费】基于SpringBoot+Vue.JS图书个性化推荐系统(JAVA毕业设计)
本文项目编号 T 015 ,文末自助获取源码 \color{red}{T015,文末自助获取源码} T015,文末自助获取源码 目录 一、系统介绍1.1 业务分析1.2 用例设计1.3 时序设计 二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究…...

STM32(F103ZET6)第十九课:FreeRtos的移植和使用
目录 需求一、FreeRtos简介二、移植FreeRtos1.复制代码2.内存空间分配和内核相关接口3.FreeRtosConfig4.添加到工程中三、任务块操作1.任务四种状态2.创建任务过程 需求 1.将FreeRtos(嵌入式实时操作系统)移植到STM32中。 2.在该系统中实现任务的创建、…...

索尼的Web3蓝图:从技术创新到现实应用的全方位布局
近年来,随着区块链技术和加密资产的迅猛发展,全球科技巨头纷纷投入其中,力图在Web3浪潮中占据一席之地。作为传统科技行业的巨头,索尼(Sony)也不甘落后,积极推动其Web3战略布局,展现出其在新兴领域的强烈野…...
探索Java中的分布式消息队列与事件总线:架构、实现与最佳实践
引言 在现代分布式系统中,消息队列和事件总线已经成为实现松耦合、高扩展性和高可用性架构的关键组件。无论是微服务架构、事件驱动架构,还是实时数据处理,消息队列和事件总线都扮演着至关重要的角色。本文将深入探讨Java中的分布式消息队列…...

HTML零基础教程(超详细)
一、什么是HTML HTML,全称超文本标记语言(HyperText Markup Language),是一种用于创建网页的标准标记语言。它通过一系列标签来定义网页的结构、内容和格式。HTML文档是由HTML元素构成的文本文件,这些元素包括标题、段…...

011.Python爬虫系列_bs4解析
我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数…...

django摄影竞赛小程序论文源码调试讲解
2系统关键技术及工具简介 系统开发过程中设计的关键技术是系统的核心,而开发工具则会影响的项目开发的进程和效率。第二部分便描述了系统的设计与实现等相关开发工具。 2.1 Python简介 Python 属于一个高层次的脚本语言,以解释性,编译性&am…...
Unity-OpenCV-Imgproc函数概览
OpenCV-Imgproc函数概览 函数名功能描述createLineSegmentDetector创建一个智能指针到 LineSegmentDetector 对象并初始化它。此算法用于检测图像中的线段。getGaussianKernel返回高斯滤波器的系数。这些系数用于平滑图像或进行高斯模糊。getDerivKernels返回计算图像空间导数的…...

水晶连连看 - 无限版软件操作说明书
水晶连连看 – 无限版游戏软件使用说明书 文章目录 水晶连连看 – 无限版游戏软件使用说明书1 引言1.1 编写目的1.2 项目名称1.3 项目背景1.4 项目开发环境 2 概述2.1 目标2.2 功能2.3 性能 3 运行环境3.1 硬件3.2 软件 4 使用说明4.1 游戏开始界面4.2 游戏设定4.2.1 游戏帮助4…...
目标检测-YOLOv3
YOLOv3介绍 YOLOv3 (You Only Look Once, Version 3) 是 YOLO 系列目标检测模型的第三个版本,相较于 YOLOv2 有了显著的改进和增强,尤其在检测速度和精度上表现优异。YOLOv3 的设计目标是在保持高速的前提下提升检测的准确性和稳定性。下面是对 YOLOv3 …...
vscode好用的快捷键整理~
vscode好用的快捷键 将当前行复制并插入到上一行 shift alt ↑将当前行复制并插入到上一行 shift alt ↓将光标复制到上一行 ctrl alt ↑将光标复制到下一行 ctrl alt ↓删除当前行 ctrl x 本身是剪切当前行,也可以作为删除当前行来用选中下一个相同的片段…...
Docker in Docker 实践 on mac
在尝试tekton构建ci pipeline是,需要在k8 pod里build image,于是研究了如何docker in docker。 1. 编写自己的dind docker image FROM docker:20.10.16-dind ENV DOCKER_HOST unix:///var/run/docker.sock 2. docker build 自己的dind docker image并…...
Flask-Session扩展,使用Redis存储会话数据
深入理解Flask-session扩展Redis Flask 应用中使用 flask-session 扩展将 session 数据存储在 Redis 中是一种高效且可扩展的方法,特别是在需要处理大量用户或需要分布式部署的应用中。以下是如何在 Flask 应用中配置 flask-session 以使用 Redis 存储 session 的步…...

urdf ( xacro ) 的 collision碰撞参数设置
目录 写在前面的话整体流程1 URDF 文件结构2 查看原始碰撞形状描述3 加入简单碰撞形状描述方法一 Meshlab 自动测量方法二 人为测量 4 加入XACRO函数简化描述 最终结果展示侧视图正视图碰撞几何体中心点设置不对出现的结果 写在前面的话 本文使用的 URDF 文件是由 solidworks …...

iOS——方法交换Method Swizzing
什么是方法交换 Method Swizzing是发生在运行时的,主要用于在运行时将两个Method进行交换,我们可以将Method Swizzling代码写到任何地方,但是只有在这段Method Swilzzling代码执行完毕之后互换才起作用。 利用Objective-C Runtimee的动态绑定…...

【有啥问啥】大模型应用中的哈希链推理任务
大模型应用中的哈希链推理任务 随着人工智能技术的快速发展,尤其是大模型(如GPT、BERT、Vision Transformer等)的广泛应用,确保数据处理和模型推理的透明性与安全性变得愈发重要。哈希链推理任务作为一种技术手段,能够…...

DevExpress WinForms v24.1新版亮点:功能区、数据编辑器全新升级
DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...