专业编程基础技术教程

网站首页 > 基础教程 正文

前端-现代浏览器中第一方Cookie是怎么玩的,你知道么?

ccvgpt 2024-11-26 00:49:33 基础教程 1 ℃

本文将教你了解如何设置第一方 cookie 以确保安全性、跨浏览器兼容性,并在第三方 cookie 被淘汰后最大限度地减少损坏的可能性。

Cookie 可以是与用户上下文相关的第一方或第三方,它取决于用户当时在哪个网站上。 如果 cookie 的注册域与当前顶级页面匹配,即浏览器地址栏中显示的内容,则认为 cookie 与页面来自同一站点,即称为第一方 cookie。

前端-现代浏览器中第一方Cookie是怎么玩的,你知道么?

如果注册域与当前站点不同,我们都称作第三方cookie。

如何正确设置第一方Cookie

如果您设置的 cookie 未跨站点使用,例如,它用于管理您站点上的会话并且从未在跨站点 iframe 中使用,则该 cookie 始终在第一方上下文中使用。

默认情况下,cookie 可以跨站点共享、通过 JavaScript 访问并通过 HTTP 连接发送,这会带来一些隐私和安全风险。 虽然通过隐私沙盒和其他建议(例如原始绑定 cookie)正在改进默认行为,但您现在可以通过在 cookie 上设置其他属性来做很多事情。

以下配置是最佳实践,可确保大多数第一方 cookie 的安全性和跨浏览器兼容性。 它将为您提供一个安全的基础,您可以调整它以仅在必要时打开权限。

解释:

__Host 是一个可选的前缀,它使某些属性成为必需属性并禁止其他属性。如下:
1. Secure 必须存在
2. Domain 必须被省略
3. Path 必须是 /

添加 __Host 后,您可以依靠浏览器检查上述属性是否设置符合 __Host 规则,如果不符合则cookie设置不成功。

Domain 属性指定哪些主机可以接收 cookie。省略它会将使cookie限制为当前主机,不包括子域:example.com 的 cookie 将在对 example.com 的每个请求时发送,但不会在对 images.example.com 的请求时发送。

Path 表示浏览器发送 Cookie 标头所请求的 URL 中必须存在的路径。设置 Path=/ 意味着将 cookie 发送到该域上的所有 URL 路径。 no Domain 和 Path=/ 的组合使 cookie 尽可能接近地绑定到本域。

HttpOnly 属性通过限制 JavaScript 访问增加了一些针对您网站上的恶意第三方脚本的保护。它允许仅在请求标头中发送 cookie,并禁止JavaScript使用document.cookie。即使使用 HttpOnly,您仍然可以使用JavaScript发送请求(fetch/XmlHTTP Request), 如果您指定需要包含cookie,这些请求上的发送仍然会带上它。?但如果您网站上的存在恶意脚本,那么它们对 cookie 数据的访问将受到限制。

Max-Age 限制了 cookie 的寿命,因为浏览器会话可以持续很长时间,而且您不希望陈旧的 cookie 永远存在。Max-Age 以秒为单位定义,在上面的示例中,它设置为7776000秒,即90天。Max-Age 的最大值不得大于 400 天(34560000 秒)。 限制 cookie 寿命的另一种方法是指定 Expires 属性,该属性设置未来的到期日期。 请注意,Expires 属性中设置的日期和时间与设置 cookie 的客户端相关,而不是服务器。

SameSite=Lax 将 cookie 限制为仅在与地址栏同域名的同一站点请求上发送。 SameSite=Lax 是现代浏览器中的默认值,但最好指定它以实现跨可能具有不同默认值的浏览器的兼容性。

子域名中如何正确设置第一方Cookie

如果您有一个包含子域的站点,并且希望在所有子域中进行一个会话,则主机前缀可能过于严格。 例如,news.site 可能有主题的子域,例如 Finance.news.site 和 sport.news.site,并且您希望所有这些子域都有一个用户会话。 在这种情况下,请使用 __Secure 前缀而不是 __Host 并指定域。

__Secure 是一个可选前缀,它比 __Host 声明的要求更少:它只需要使用 Secure 属性设置 cookie。Secure 属性将 cookie 限制为仅通过 HTTPS 协议发送。 __Secure 前缀告诉浏览器检查 cookie 是否设置了 Secure 属性,如果不是则拒绝它。

限制对第三方网站发起的请求的第一方 cookie 访问

虽然 SameSite=Lax cookie 不会在跨站点子请求上发送(例如,在第三方站点上加载嵌入式图像或 iframe 时),但它们会在用户从第三方站点跳转到源站点时发送。

您可以通过 SameSite=Strict 进一步限制 cookie 访问并禁止将它们与从第三方网站发起的请求一起发送。

Tags:

最近发表
标签列表