网站首页 > 基础教程 正文
本文将教你了解如何设置第一方 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 访问并禁止将它们与从第三方网站发起的请求一起发送。
猜你喜欢
- 2024-11-26 工作中,前端开发要看项目,怎么查看别人的js项目代码
- 2024-11-26 Cookie 在爬虫中的应用
- 2024-11-26 55个JS代码让你轻松当大神
- 2024-11-26 操作cookie
- 2024-11-26 9个原生js库助力前端开发,你都用过吗?
- 2024-11-26 Selenium4+Python3系列(七) Iframe、常见控件、JS、Cookie操作
- 2024-11-26 浅谈JavaScript的用处
- 2024-11-26 Web安全:XSS怎么实现?Cookie 劫持如此简单,你的网站安全吗?
- 2024-11-26 Cookies和Session的区别和理解
- 2024-11-26 cookie是什么?有什么用?cookie详解,一篇文章彻底搞懂cookie
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)