什么是Cookie?浏览器状态、安全性和范围

什么是Cookie?浏览器状态、安全性和范围

无痕通用抓取API检索允许的公共网页内容,并在响应中观察Cookie时可以呈现JavaScript。

TL;DR

  • Cookie有一个明确的协议角色。 Cookie是一个小的名称-值项,服务器请求用户代理存储并在后续请求中返回与其作用域匹配的项。
  • Cookie必须在正确的层读取。 传输、表示、浏览器策略和应用授权仍然是独立的问题。
  • 中介可以改变应用观察到的内容。 网关、缓存、浏览器默认设置和客户端库可以在源字节和解析数据之间添加处理。
  • 验证需要内容证据。 单独的状态或字段并不能证明预期的公共表示是否到达。
  • 安全性取决于作用域和验证。 协议语法从不授予访问资源或信任调用者提供的值的权限。

什么是Cookie?

Cookie是一个小的名称-值项,服务器请求用户代理存储并在后续请求中返回与其作用域匹配的项。服务器通过Set-Cookie响应字段创建或更新Cookie,而用户代理在Cookie请求字段中发送适用的值。Cookie为Web交互添加状态,但它们并不使HTTP本身变成一个有状态的协议。

有用的定义包括机制及其边界。Cookie影响交换的特定部分,而相邻的责任仍然属于HTTP、浏览器、所选传输、应用程序或服务器的数据模型。保持这些层的分离使错误报告可重复,并防止配置更改被误认为是访问控制决策。

对于API开发者,第一个问题是谁创建了值或行为。下一个问题是谁进行了解释。最后一个问题是什么可观察的结果证明解释有效。这三个答案将术语转化为可测试的接口契约。

Cookie存储和返回周期

响应可以包含一个或多个Set-Cookie字段。每个指令提供一个名称和值以及控制域、路径、生命周期、传输安全性、脚本访问、跨站行为和可选分区的属性。用户代理在存储任何内容之前评估指令。

在后续请求中,用户代理选择与请求上下文匹配的域、路径、安全性、过期和同一网站规则的存储Cookie。它将选定的名称-值对序列化到Cookie字段中。然后,服务器将不透明值映射到应用程序状态,例如会话记录或偏好设置。

Cookie值不会自动加密或可信。客户端可以更改许多Cookie值,网络保护并不能证明应用数据是有效的。服务器根据它们的体系结构签名、加密或查找敏感状态,并仍然在每个请求上验证授权。

删除是另一种使用相同名称和匹配作用域与过期的生命周期的Set-Cookie操作。在错误的路径或域下清除一个名称可能会使另一个Cookie保持活动状态,这就是为什么在实践中作用域是Cookie身份的一部分。

Cookie属性及其作用

以下术语将通常合并为一个标签的组件分开。将它们视为参与者之间的接口,而不是网络跟踪中的装饰。

控制哪个主机和合格的子域可以接收Cookie;省略会创建更严格的主机仅Cookie。

路径

限制发送到与存储路径规则匹配的请求路径;这是路由作用域,而不是授权边界。

过期和最大年龄

设置持久生命周期。当两者同时存在时,最大年龄优先。

安全

限制传输到安全传输上下文,受用户代理规则的约束。

HttpOnly

防止文档JavaScript读取值,同时允许浏览器在匹配请求中发送该值。

SameSite

控制Cookie是否在多个跨站请求上下文中发送,并与None的安全要求配合使用。

为什么Cookie在网络数据收集中的重要性

Cookie可以改变什么字节到达,如何解释这些字节,或浏览器代码是否可以观察结果。一个收集工作流程应该在更换工具之前找出该效果。记下请求的URL、最终URL、响应状态、表示类型、相关的协议字段和一个预期的内容标记。该紧凑记录将正确页面与访问消息、同意屏幕、重定向目标、空应用程序外壳或不兼容编码区分开。

直接HTTP是最简单的获取路径,当所需数据存在于开放的服务器渲染响应中时。浏览器在批准内容依赖于JavaScript执行、浏览器管理状态、导航或浏览器安全策略时变得相关。这两条路径不应被强制看起来相同:浏览器根据平台规则管理Cookies、压缩、重定向、CORS和存储,而直接客户端暴露出不同的默认设置。

会话的连续性很重要,每当一个响应为下一个请求建立状态时。保持在一个边界客户端上下文内的授权序列,保留所需的区域和网络源,并避免混合不相关工作的状态。代理改变网络源;它不会复制头部、解码表示、执行脚本或授予对受限内容的访问。

解析仅在表示验证后开始。在提取字段之前,请确认最终主机、规范身份(如可用)、媒体类型、解码状态和所需的业务标记。此顺序可以防止解析器将错误文档转换为空记录,这些记录看起来在技术上是成功的。

中介需要特别关注。内容交付网络可以选择编码变体,网关可以响应 OPTIONS,缓存可以重用协商响应,应用服务器可以设置 cookies 或授权字段。仅将应用代码与最终页面输出进行比较跳过了可能做出决策的层。

无抓取通用抓取 API 在团队需要管理获取允许的公共内容时相关,包括 JavaScript 渲染的页面。获取合同仍应定义目标、允许的字段、预期的表示、接收标记和停止条件。产品能力并不能替代来源条款、隐私审查或应用级验证。

Cookie 通常代表什么

当 Cookie 改变具体的产品行为、兼容性要求或诊断决策时,它在架构中占有一席之地。这些用例首先描述工作,然后描述协议特性。

会话查找

不透明标识符可以指向服务器端经过身份验证的会话状态。

偏好设置

网站可以在适当的范围内记住区域、布局或同意选择。

购物状态

购物车标识符可以将匿名或已登录请求连接到服务器端记录。

安全状态

单独的值可以在与服务器验证配对时支持请求伪造防御。

实验分配

一个有限的标识符可以将用户保持在一个批准的测试变体中。

收集期间的连续性

经过授权的浏览器工作流可以在相关的公共页面之间保持同意或导航状态。

与其他浏览器存储的 Cookie 比较

Cookie 属于 HTTP 的一个层,不应与相邻层混淆。健全的实现识别哪个组件选择值,哪个组件可以更改它,以及什么证据证明最终表示是正确的。

维度Cookie相关概念或替代方案
Cookie在匹配的 HTTP 请求中自动发送会话、偏好设置、与 CSRF 相关的状态
localStorage由页面脚本为一个源读取和写入客户端持久偏好设置
sessionStorage限制为一个源和浏览器标签会话临时页面工作流状态
IndexedDB结构化浏览器数据库更大的离线应用数据
服务器数据库存储在浏览器外权威账户和会话记录

只有在保留层边界的情况下,比较才有用。两个机制可能在一个请求中共存,替换一个并不会自动替换另一个。以输入、可观察输出、故障状态和所有权来记录所选行为。

具有安全后果的 Cookie 错误

  • 将敏感数据放入可读值中。 根据属性和设计,Cookie 字节可能通过日志、扩展、脚本或客户端修改暴露。
  • 使用广泛的域和路径范围。 更广泛的范围将值发送到比必要更多的请求上下文。
  • 将 SameSite 视为完全的 CSRF 保护。 SameSite 是一种控制;应用程序仍然需要方法、来源和代币防御,以适应工作流。
  • 忘记 HttpOnly 在会话标识符上。 可脚本读取的身份验证 cookie 增加了脚本注入缺陷的影响。
  • 假设路径防止访问。 路径影响发送规则,但不将内容隔离为授权机制。
  • 记录完整的 Cookie 字段。 操作日志可能成为第二个凭证存储,除非值被编辑。

在消除假设关于库或浏览器自动执行的内容后,大部分故障更容易诊断。捕获最小的轨迹,编辑秘密,并一次更改一个受控变量。目标是返回表示的稳定解释,而不是一组不相关的标头调整。

Cookie 调试序列

该序列在启动前作为设计审查,在行为变化后作为生产诊断。它将协议证据与应用结果相连接。

  1. 检查应创建状态的请求上的确切 Set-Cookie 响应。
  2. 记录名称和属性,同时从屏幕截图和共享日志中编辑值。
  3. 检查稍后请求的主机、路径、方案、同站上下文和过期时间。
  4. 使用浏览器的 cookie 存储视图确认指令是否被接受。
  5. 检查稍后 Cookie 请求字段,并验证预期名称仅在意图范围内存在。
  6. 确认服务器将值映射到当前状态,并不接受过时或未经授权的记录。
  7. 在相同作用域属性下删除,并验证在另一个路径下没有重复的 cookie。

通过保存小的接受样本和带有相同编辑规则的拒绝样本来完成审查。将来的更改可以与已知页面身份、预期字段和解码内容进行比较,而不是仅仅依赖记忆或截图。

cookie 的安全性和可观察性

cookie 参与可以跨浏览器、网关、缓存和源服务器的请求路径。每个跳转应仅接受其理解的值,保留必须存活的字段,并避免将凭据或个人数据复制到日志中。协议语法不是授权。

操作记录应捕获请求的 URL、最终 URL、状态、表示类型、相关字段名称和受限内容标记。全身和凭证值在例行诊断中很少需要,并且可能会产生不必要的保留风险。

浏览器行为和直接 HTTP 行为是不同的测试面。CORS、cookie 存储、自动解压缩和重定向处理可能在应用代码查看结果之前由浏览器或库执行。比较捕获时记录客户端及其默认值。

定义 cookie 的标准

HTTP cookie 规范 定义了 Cookie 和 Set-Cookie 行为。这个主要来源修正了本文使用的词汇和边界,而实现行为仍需要在所选客户端和部署中观察。

MDN 的 cookie 指南 解释了浏览器存储、生命周期和安全属性。这个主要来源修正了本文使用的词汇和边界,而实现行为仍需要在所选客户端和部署中观察。

Set-Cookie 字段参考 记录当前属性行为。这个主要来源修正了本文使用的词汇和边界,而实现行为仍需要在所选客户端和部署中观察。

OWASP 会话管理指南 将 cookie 设置与会话安全连接起来。这个主要来源修正了本文使用的词汇和边界,而实现行为仍需要在所选客户端和部署中观察。

Cookie 边界

cookie 是具有明确作用域和生命周期的浏览器管理状态;安全应用将值保持狭窄,进行服务器端验证,并避免将存储属性视为授权。

将该规则放入验收测试中。说明哪个参与者发送信号,哪个参与者解释信号,哪些中介可以修改路径,以及哪个内容标记证明成功。这使得 Cookie 成为一个可观察系统的一部分,而不是在失败后附加的标签。

准备验证公共 Web 响应了吗?

使用 Scrapeless Universal Scraping API 检索批准的公共内容,并检查本指南中描述的表示合同。

立即注册并获得 $5 免费积分无需信用卡.

领取您的 $5 积分 →

常见问题解答

cookie 是由服务器还是浏览器存储的?

cookie 由用户代理在服务器发送 Set-Cookie 或允许的脚本创建后存储。服务器通常存储 cookie 值引用的权威会话或帐户记录。

cookie 可以被 JavaScript 读取吗?

cookie 只有在未被 HttpOnly 保护且其作用域允许访问时,可以通过 document.cookie 读取。HttpOnly cookie 仍然会自动随匹配的请求发送。

什么使 cookie 成为第一方或第三方?

第一方或第三方标签取决于 cookie 所在站点与顶层站点上下文之间的关系。现代浏览器策略可以超出基础存储属性限制跨站 cookie 行为。

Secure 会加密 cookie 值吗?

不会。Secure 限制传输到安全上下文;TLS 保护连接。cookie 值本身在静态时不自动加密或使其值得信赖。

cookie 是如何删除的?

通过为相同名称和匹配作用域发送新的 Set-Cookie 指令,Max-Age 设置为零或过期时间在过去来删除 cookie。重复的路径或域必须单独处理。

参考文献