小cookie,大智慧

Cookie是什么?cookies是你访问网站时创建的数据片段文件,通过保存浏览信息,它们使你的在线体验更加轻松。
使用cookies,可以使你保持在线登录状态,记录你的站点偏好,并为你提供本地化支持。

First-party cookies or Third-party cookies

第一方cookie由你访问的站点创建。该站点指的是地址栏显示的站点;
第三方cookie是由其他站点创建的。这些站点拥有你当前访问的网页上部分资源,如广告或图像。
第一方/第三方cookie不是绝对的标签,而是相对于用户的上下文。
同一cookie可以是第一方也可以是第三方,这取决于用户当时所在的网站。

为什么要提强调第三方cookie,这与下面的cookie的SameSite策略密切相关。

cookie的常规使用方式

web服务端发送给浏览器的cookie,浏览器会存储并在下次请求原服务器的时候回发cookie。

在HTTP请求模型中以标头的形式体现:Response中Set-Cookie标头种植cookie;Request Cookie标头携带(该请求允许携带的)cookies

HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: X-BAT-FullTicketId=TGT-969171-******; path=/; samesite=none; httponly[page content]

Cookie标头的内容是键值对(键值对才是具业务含义的cookie);同名cookie覆盖原键值,不同名cookie会追加到键值对。

GET /sample_page.html HTTP/1.1
Host: www.example.org
Cookie: yummy_cookie=choco; X-BAT-FullTicketId=TGT-969171-******

除了服务端响应时使用Set-Cookie标头种植cookie,浏览器javascript也可以种植cookie

cookie的种植面积

DomainPath属性定义了cookie的写入范围:哪些url的请求可以携带该cookie。

  • Domain指定哪些host能被种植该cookie,如果没有指定,默认是当前document location所在的host,不包含子域;如果指定了Domain,那么包括子域。

例如设置了Domain=bat.com, 那么类似于developer.bat.com下的url请求都会种下该cookie.
  • Path 指定能携带该cookie的具体url。"/" 是目录分隔符,会匹配子目录.

 例如设置了Path =/doc,下面的目录都会被匹配.- /docs
- /docs/web/
- /docs/web/http

cookie的有效时长

一般情况下浏览器关闭,cookie失效;
可通过设置特定的Expires或者Max-Age为cookie设置相对较长的有效时间。

 Set-Cookie: id= a2faw; Expires=Wed,21 Oct 2015 07:12 GMT

当设置了过期时间,这个设置的时间是相对于浏览器而言,而非服务器。

cookie与web安全息息相关

因为cookie是站点私有片段数据,与web上各种攻击密切相关,如XSS,CSRF.

根据W3c的操作规范,种植cookie时可通过某些属性限制cookie的使用方式。

发送cookie的物理安全

Secure指定了发送cookie的物理安全:要求以HTTPS形式回发cookie

Chrome52+、Firefox52+已经支持Secure指令,再使用http请求已经不会携带Secure cookie

即便是Secure指令, 敏感信息也不要放在cookie中, 因为他们天生就不安全,https并不能提供足够有效的安全防护。

谁能访问cookie?

web上能访问cookie的物件有两种:

  • 浏览器请求

  • JavaScript

HttpOnly指示cookie将不能通过JavaScript的document.cookie编程接口访问,这样可以缓解对跨站点脚本(XSS)的攻击。

如:访问会话在浏览器留置的认证cookie就没有必要暴露给JavaScript,可对其设置HttpOnly指令
Set-Cookie: X-BAT-TicketId=TGT-969171-******; Expires=Wed, 21 Oct 2020 07:28:00 GMT; Secure; HttpOnly

哪些浏览器请求能合法携带cookie?

首先科普一下重要的web HTTP知识:
对页面资源的请求,依据请求发起者的源Origin与资源的源Origin的相等关系,被划分为4类。

Http请求中Sec-Fetch-Site标头指示了这个属性:

Sec-Fetch-Site描述
cross-site请求的发起源与资源源完全不一样
same-origin请求的发起源与资源源完全一样
same-site请求的发起源与资源源不完全一样,位于同一顶级域名下二级域名
none

Q1. 源Origin、站Site、域Domain傻傻分不清楚?
观察www.cnblog.com任意一篇博文的network,看动图!

在博客页面www.cnblog.com/xxx/p/110.htm上发起的

  1. www.cnblogs.com/xxx/ajax/Follow/GetFollowStatus.aspx是same-origin请求

  2. blog-static.cnblogs.com/files/shwee/clock.js是same-site请求

  3. www.google-analytics.com/r/collect?v=1&_v=j81&a=38982783&t=pageview&_s=1是cross-site请求

Q2. 聊cookie为什么要提到Sec-Fetch-Site标头?
答:B站页面在请求A站资源时能否携带A站cookie(第三方cookie)不仅是一个道德问题;技术上还牵涉web安全(CSRF)。

针对以上的请求类型,浏览器针对cookie有SameSite属性,提供针对跨站点请求伪造攻击(CSRF)的保护。

在服务端Set-Cookie种植cookie时,SmmeSite属性值可指示浏览器是否可在后续的“同一站点”或“跨站点”请求中携带这些cookie

Set-Cookie: X-BAT-TicketId=TGT-969171-******; path=/; samesite=none; httponly

有如下枚举值:

  • Lax : 对同源、顶级域的请求才可以携带cookie (等价于same-site)

  • Strict: 对同源请求才可以使携带cookie (等价于same-origin)

  • None: 对于cookie的使用无限制,随便使用

最新的IEEF cookie SameSite策略:

  • 敦促浏览器版本迁移,使cookie的SameSite默认= Lax

  • 如果需要跨域发送cookie,请使用None枚举值选择无SameSite限制, None指令需要搭配Secure指令
    Tip:None枚举值是标准新增枚举值,一些旧浏览器不识别这个枚举值,可能导致一些问题.

总之,IEEF配合浏览器给cookie的存取、使用、传输、规定了一套策略,环环相扣,促进了web上cookie的平衡应用。

总结本文输出

  1. 第一方cookie vs 第三方cookie的认定:取决于访客所处的上下文

  2. cookie的常规用法

  3. 根据源Origin、站Site、域Domain,请求被划分为4大类,关注HTTPSec-Fetch-Site标头

  4. 服务器在种植cookie时,可对cookie设置SameSite属性,故SameSite作用对象是cookie

  5. SameSite属性决定了后续的跨域/跨站请求是否可以携带B站cookie,缓解了CSRF攻击

  • https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies

  • https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Sec-Fetch-Site

  • https://web.dev/samesite-cookies-explained

推荐阅读

● 程序员应对浏览器同源策略的姿势

● 临近年关,修复ASP.NET Core因浏览器内核版本引发的单点登录故障

● ASP.NET Core跨平台技术内幕

● TPL Dataflow组件应对高并发,低延迟要求

● 实例解读Docker Swarm

● 基于docker-compose的Gitlab CI/CD实践&排坑指南

   转载是一种动力,分享是一种美德    ~~..~~

如果你觉得文章还不赖,您的鼓励是原创干货作者的最大动力,让我们一起激浊扬清。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 最少使用(lru)置换算法_LRU算法详解及最简单的Java实现

更多内容,欢迎关注微信公众号:全菜工程师小辉~LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。LRU算法的表现新…

word List 48

word List 48 如果存在什么问题,欢迎批评指正!谢谢!

一文读懂常用开源许可证

社区时常为流行产品中有争议的开源许可证而感到震惊,这引起各方关注,纷纷争论何为真正的开源许可证。去年,Apache 基金会(Apache Foundation)禁止使用 Facebook React 那些具有争议的专利组件,这引发了轩然…

[蓝桥杯2015初赛]手链样式-思维+next_permutation枚举(好题)

题目描述 小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。 他想用它们串成一圈作为手链,送给女朋友。 现在小明想知道:如果考虑手链可以随意转动或翻转,一共有多少不同的组合样式? 输出 请你输出该整数。不要输出任…

word List 49

word List 49 如果存在什么问题,欢迎批评指正!谢谢!

(四)开源C# WPF控件库《AduSkin – UI》

微信公众号:【Dotnet9的博客】,网站:【Dotnet9】,问题或建议:【请网站留言】, 如果对您有所帮助:【欢迎赞赏】。https://dotnet9.com追求极致,永臻完美A Beautiful WPF Control UI一…

python输入数据爬取_python根据用户需求输入想爬取的内容及页数爬取图片方法详解...

本次小编向大家介绍的是根据用户的需求输入想爬取的内容及页数。 主要步骤: 1.提示用户输入爬取的内容及页码。 2.根据用户输入,获取网址列表。 3.模拟浏览器向服务器发送请求,获取响应。 4.利用xpath方法找到图片的标签。 5.保存数据。 代码…

word List 50

word List 50 如果存在什么问题,欢迎批评指正!谢谢!

单点突破,击穿阈值,DevOps转型你需要这样做

在上篇文章里,我提到了如何通过对价值流进行分析、拆解关键要素指标,并通过缩减处理时间PT、降低前置时间LT、提高完成&准确的百分比(C&A%),实现企业研发效能10倍速提升。大家点击回看这篇文章《以埃隆马斯克“…

双向dcdc变换器simulink仿真_二极管箝位五电平变换器Simulin仿真

● 本期为二极管箝位五电平变换器的基本Simulink仿真,只包含其SPWM调制。感谢公众号一位好友“一叶知秋”提供Simulink模型并分享。01二极管箝位五电平变换器调制方法传统的变换器存在高的电压变化率和共模电压,且波形谐波含量较大,使得输出滤…

在.NET Core中使用MachineKey

在.NET Core中使用MachineKey在上篇文章中,我介绍了 Cookie是基于 MachineKey生成的, MachineKey决定了 Cookie生成的算法和密钥,并如果使用多台服务器做负载均衡时,必须指定一致的 MachineKey。但在 .NETCore中,官方似…

cg word List 1

cg word List 1 如果存在什么问题,欢迎批评指正!谢谢!

[蓝桥杯2016初赛]剪邮票-dfs+next_permutation(好题)

题目描述 如下图, 有12张连在一起的12生肖的邮票。现在你要从中剪下5张来,要求必须是连着的。(仅仅连接一个角不算相连) 比如,下面两张图中,粉红色所示部分就是合格的剪取。 请你计算,一共有多少种不同…

cg word List2

cg word List 2 如果存在什么问题,欢迎批评指正!谢谢!

如何扩展分布式日志组件(Exceptionless)的日志通知?

作者:justmine头条号:大数据与云原生微信公众号:大数据与云原生创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。为了方便阅读,微信公众号已按分类排版,后续的文章…

hadoop hive集群_基于伪分布式Hadoop搭建Hive平台详细教程

一、搭建环境的前提条件环境:Linux系统Hadoop-2.6.0MySQL 5.6apache-hive-2.3.7这里的环境不一定需要和我一样,基本版本差不多都ok的,所需安装包和压缩包自行下载即可。但是注意hive和hadoop都是2.x系列版本的。这里提供一个我下载的hive版本…

cg word List 3

cg word List 3 如果存在什么问题,欢迎批评指正!谢谢!

.NET Core开发实战(第7课:用Autofac增强容器能力)--学习笔记(上)

07 | 用Autofac增强容器能力:引入面向切面编程(AOP)的能力这一节讲解使用第三方框架来扩展依赖注入容器什么情况下需要我们引入第三方容器组件?大部分情况下,默认的容器组件足够使用当需要一些非常特殊的场景如下&…

sql 对groupby 后的数据limit_SQL(三)——汇总分析

1. 汇总分析函数的3个功能:①功能;②输入(参数);③输出(返回值)查询课程编号为“0002”的总成绩:查询选了课程的学生人数:2.分组sql分组:group bygroup by 实现数据分组&…

cg word List4

cg word List4 如果存在什么问题,欢迎批评指正!谢谢!