跳转到主要内容

标签(标签)

资源精选(342) Go开发(108) Go语言(103) Go(99) angular(82) LLM(75) 大语言模型(63) 人工智能(53) 前端开发(50) LangChain(43) golang(43) 机器学习(39) Go工程师(38) Go程序员(38) Go开发者(36) React(33) Go基础(29) Python(24) Vue(22) Web开发(20) Web技术(19) 精选资源(19) 深度学习(19) Java(18) ChatGTP(17) Cookie(16) android(16) 前端框架(13) JavaScript(13) Next.js(12) 安卓(11) typescript(10) 资料精选(10) NLP(10) 第三方Cookie(9) Redwoodjs(9) LLMOps(9) Go语言中级开发(9) 自然语言处理(9) 聊天机器人(9) PostgreSQL(9) 区块链(9) mlops(9) 安全(9) 全栈开发(8) ChatGPT(8) OpenAI(8) Linux(8) AI(8) GraphQL(8) iOS(8) 软件架构(7) Go语言高级开发(7) AWS(7) C++(7) 数据科学(7) whisper(6) Prisma(6) 隐私保护(6) RAG(6) JSON(6) DevOps(6) 数据可视化(6) wasm(6) 计算机视觉(6) 算法(6) Rust(6) 微服务(6) 隐私沙盒(5) FedCM(5) 语音识别(5) Angular开发(5) 快速应用开发(5) 提示工程(5) Agent(5) LLaMA(5) 低代码开发(5) Go测试(5) gorm(5) REST API(5) 推荐系统(5) WebAssembly(5) GameDev(5) CMS(5) CSS(5) machine-learning(5) 机器人(5) 游戏开发(5) Blockchain(5) Web安全(5) Kotlin(5) 低代码平台(5) 机器学习资源(5) Go资源(5) Nodejs(5) PHP(5) Swift(5) 智能体(4) devin(4) Blitz(4) javascript框架(4) Redwood(4) GDPR(4) 生成式人工智能(4) Angular16(4) Alpaca(4) SAML(4) JWT(4) JSON处理(4) Go并发(4) kafka(4) 移动开发(4) 移动应用(4) security(4) 隐私(4) spring-boot(4) 物联网(4) nextjs(4) 网络安全(4) API(4) Ruby(4) 信息安全(4) flutter(4) 专家智能体(3) Chrome(3) CHIPS(3) 3PC(3) SSE(3) 人工智能软件工程师(3) LLM Agent(3) Remix(3) Ubuntu(3) GPT4All(3) 软件开发(3) 问答系统(3) 开发工具(3) 最佳实践(3) RxJS(3) SSR(3) Node.js(3) Dolly(3) 移动应用开发(3) 编程语言(3) 低代码(3) IAM(3) Web框架(3) CORS(3) 基准测试(3) Go语言数据库开发(3) Oauth2(3) 并发(3) 主题(3) Theme(3) earth(3) nginx(3) 软件工程(3) azure(3) keycloak(3) 生产力工具(3) gpt3(3) 工作流(3) C(3) jupyter(3) 认证(3) prometheus(3) GAN(3) Spring(3) 逆向工程(3) 应用安全(3) Docker(3) Django(3) R(3) .NET(3) 大数据(3) Hacking(3) 渗透测试(3) C++资源(3) Mac(3) 微信小程序(3) Python资源(3) JHipster(3) 大型语言模型(2) 语言模型(2) 可穿戴设备(2) JDK(2) SQL(2) Apache(2) Hashicorp Vault(2) Spring Cloud Vault(2) Go语言Web开发(2) Go测试工程师(2) WebSocket(2) 容器化(2) AES(2) 加密(2) 输入验证(2) ORM(2) Fiber(2) Postgres(2) Gorilla Mux(2) Go数据库开发(2) 模块(2) 泛型(2) 指针(2) HTTP(2) PostgreSQL开发(2) Vault(2) K8s(2) Spring boot(2) R语言(2) 深度学习资源(2) 半监督学习(2) semi-supervised-learning(2) architecture(2) 普罗米修斯(2) 嵌入模型(2) productivity(2) 编码(2) Qt(2) 前端(2) Rust语言(2) NeRF(2) 神经辐射场(2) 元宇宙(2) CPP(2) 数据分析(2) spark(2) 流处理(2) Ionic(2) 人体姿势估计(2) human-pose-estimation(2) 视频处理(2) deep-learning(2) kotlin语言(2) kotlin开发(2) burp(2) Chatbot(2) npm(2) quantum(2) OCR(2) 游戏(2) game(2) 内容管理系统(2) MySQL(2) python-books(2) pentest(2) opengl(2) IDE(2) 漏洞赏金(2) Web(2) 知识图谱(2) PyTorch(2) 数据库(2) reverse-engineering(2) 数据工程(2) swift开发(2) rest(2) robotics(2) ios-animation(2) 知识蒸馏(2) 安卓开发(2) nestjs(2) solidity(2) 爬虫(2) 面试(2) 容器(2) C++精选(2) 人工智能资源(2) Machine Learning(2) 备忘单(2) 编程书籍(2) angular资源(2) 速查表(2) cheatsheets(2) SecOps(2) mlops资源(2) R资源(2) DDD(2) 架构设计模式(2) 量化(2) Hacking资源(2) 强化学习(2) flask(2) 设计(2) 性能(2) Sysadmin(2) 系统管理员(2) Java资源(2) 机器学习精选(2) android资源(2) android-UI(2) Mac资源(2) iOS资源(2) Vue资源(2) flutter资源(2) JavaScript精选(2) JavaScript资源(2) Rust开发(2) deeplearning(2) RAD(2)

category

警告:浏览器正在限制第三方cookie的使用。如果您过去在cookie上设置了SameSite=None,则需要采取其他操作。了解如何准备第三方cookie限制。


注意:此页面是SameSite cookie属性更改系列的一部分,其中包括以下内容:

  • 了解Cookie
  • SameSite饼干配方
  • 有计划的相同站点


 

每个cookie都包含一个键值对以及控制cookie何时何地使用的许多属性。

SameSite属性(在RFC6265bis中定义)的引入允许您声明您的cookie是限于第一方还是同一站点上下文。准确理解“site”在这里的含义是很有帮助的。该站点是域后缀和其前面的域部分的组合。例如,www.web.dev域是web.dev站点的一部分。

关键术语:如果用户在www.web.dev上,并从static.web.dev请求图像,则是同一个网站请求。

公共后缀列表定义在同一网站上的页面计数。它不仅依赖于.com等顶级域,还可以包括github.io等服务。这使您的project.github.io和my-project.githubio可以算作独立的网站。

关键术语:如果用户在你的project.github.io上,并从my-project.githubio请求图像,这是一个跨站点请求。

使用SameSite属性声明cookie使用情况


cookie上的SameSite属性提供了三种不同的方式来控制这种行为。您可以选择不指定属性,也可以使用Strict或Lax将cookie限制为相同的网站请求。

如果您将SameSite设置为Strict,则cookie只能在第一方上下文中发送;也就是说,如果cookie的站点与浏览器地址栏中显示的站点匹配。因此,如果promo_shown cookie设置如下:

Set-Cookie: promo_shown=1; SameSite=Strict


当用户在您的网站上时,cookie会按预期随请求一起发送。然而,如果用户从另一个链接进入你的网站,cookie不会在最初的请求中发送。这对于与初始导航(如更改密码或购买)后面的功能相关的cookie来说是好的,但对于类似promo_shown的cookie来说,这太过限制。如果你的读者按照链接进入网站,他们希望发送cookie,以便应用他们的偏好。

SameSite=Lax允许浏览器发送带有这些顶级导航的cookie。例如,如果另一个网站引用了你的网站内容,在这种情况下,使用你的猫照片并提供一个链接到你的文章,如下所示:

<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>


将cookie设置为Lax,如下所示:

Set-Cookie: promo_shown=1; SameSite=Lax

当浏览器为他人的博客请求amazingcat.png时,你的网站不会发送cookie。然而,当读者在您的网站上点击cat.html的链接时,该请求确实包括cookie。

我们建议以这种方式使用SameSite,将影响网站显示的cookie设置为Lax,将与用户操作相关的cookie设置成Strict。

注意:无论是Strict还是Lax都不是网站安全的完整解决方案。Cookie是作为用户请求的一部分发送的,您应该以与任何其他用户输入相同的方式对其进行消毒和验证。永远不要使用cookie来存储您认为是服务器端机密的数据。


您也可以将SameSite设置为None,表示希望在所有上下文中发送cookie。如果您提供其他网站使用的服务,如小工具、嵌入内容、附属程序、广告或跨多个网站登录,请使用“无”以确保您的意图明确。

三个cookie根据上下文标记为None、Lax或Strict
将cookie的上下文明确标记为None、Lax或Strict。
在没有SameSite的情况下更改默认行为

浏览器支持


SameSite属性得到了广泛支持,但尚未被广泛采用。过去,在没有SameSite的情况下设置cookie默认为在所有上下文中发送,这使得用户容易受到CSRF和无意信息泄露的影响。为了鼓励开发人员陈述他们的意图,并为用户提供更安全的体验,IETF的提案“增量更好的Cookie”列出了两个关键变化:

  • 没有SameSite属性的Cookie被视为SameSite=Lax。
  • SameSite=None的Cookie还必须指定Secure,这意味着它们需要一个安全的上下文。


这两项更改都向后兼容已正确实现SameSite属性先前版本的浏览器,以及不支持SameSite早期版本的浏览器。它们旨在通过明确cookie行为和预期用途来减少开发人员对浏览器默认行为的依赖。任何不识别SameSite=None的客户端都应该忽略它。

SameSite=Lax by default


如果发送cookie时未指定其SameSite属性,则浏览器会将该cookie视为设置为SameSite=Lax。我们仍然建议明确设置SameSite=Lax,以使您的用户体验在浏览器之间更加一致。

注意:Chrome的默认行为比显式SameSite=Lax稍微宽松一些,因为它允许网站在顶级POST请求中发送一些cookie。有关详细信息,请参阅blink dev公告。这是一种临时缓解措施。您仍然需要将跨站点cookie更新为SameSite=None;按照下一节中的说明进行固定。


SameSite=None must be secure


当您使用SameSite=None创建跨站点cookie时,您还必须将其设置为“安全”,浏览器才能接受它们:

Set-Cookie: widget_session=abc123; SameSite=None; Secure


您可以通过启用about://flags/#cookies-没有相同站点必须是安全的,并且从Firefox 69通过在about:config中设置network.cookie.sameSite.noneRequiresSecure。

我们还建议尽快将现有cookie更新为安全cookie。如果您依赖在您的网站上提供第三方内容的服务,请确保您的服务提供商更新其cookie,并更新您网站上的任何片段或依赖项,以确保其使用新的行为。

警告:一些早期版本的浏览器,包括Chrome、Safari和UC浏览器,与新的None属性不兼容,可能会忽略或限制cookie。这种行为在当前版本中是固定的,但我们建议检查您的流量,以确定受影响的用户比例。您可以在Chromium网站上看到已知不兼容客户端的列表。

SameSite cookie配方


有关更新cookie以成功处理SameSite=None的这些更改以及浏览器行为差异的更多详细信息,请参阅后续文章SameSite cookie配方。

衷心感谢Lily Chen、Malte Ubl、Mike West、Rob Dodson、Tom Steiner和Vivek Sekhar的贡献和反馈。

文章链接