Cookie中的SameSite设置

什么是Cookie

HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

第一方cookie和第三方cookie

第一方cookie

第一方 cookie 指的是由网络用户访问的域创建的 cookie。例如:当用户通过网络浏览器点击简书jianshu.com时,浏览器会在第一个页面中发送一个网页请求,这个过程需要用户直接与 jianshu.com 互动例如登录什么的。这样网络浏览器随后就将此数据文件保存到jianshu.com域名下的用户计算机上。


保存到本地的cookie文件

第三方cookie

第三方cookie是建立在别的域名不是你访问的域名(地址栏中的网址), 比如:广告网络商就是最常见的第三方 cookies 的来源,他们用它们在多个网站上追踪用户的行为,当然这些活动可以用来调整广告。此外图像、 JavaScript 和 iframe 通常也会导致第三方 cookies 的生成。

解释一下广告是如何精准投放的。首先我们所看到的广告都是由一些互联网巨头集合中小网络媒体资源,通过联盟平台帮助广告主实现广告投放,并进行数据监测统计,当你的网站或博客有一定的流量时可以去这些广告联盟官网进行申请。以百度联盟为例:使用百度的时候,会把你的此次搜索保存到cookie中,并且分配这个浏览器唯一可标识的ID号,当打开人人影视的时候,该页的广告模块就向第三方也就是广告服务商的服务器去请求百度保存在浏览器的cookie,然后就可以知道你最近浏览或者搜索过哪些商品,然后就返回给你相关的广告。

Cookie的查看

我们可以在浏览器的开发者工具中查看到当前页面的 Cookie:


Application

cookie查看2

Cookie的设置

1、客户端发送 HTTP 请求到服务器
2、当服务器收到 HTTP 请求时,在响应头里面添加一个 Set-Cookie 字段
3、浏览器收到响应后保存下 Cookie
4、之后对该服务器每一次请求中都通过 Cookie 字段将 Cookie 信息发送给服务器。
我通过post请求一个登录接口,并在登录接口中在响应头里面添加一个 Set-Cookie 字段


代码1

代码2

我们在请求返回的 Response Headers 可以看到 Set-Cookie 字段:和Request Headers 看到 cookie 字段(Response Headers和Request Headers 的作用和区别待补充)


接口请求头里

接口cookie中

当我们再调用这个服务器上的另外一个接口时我们就可以很轻松的拿到这个cookie值
代码3

我们就可以通过获取的cookie对登录用户进行再次验证,通过其cookie中的信息跳转不同的页面。
代码4

另一个接口接收到的cookie

这里提一下前端是只能读取在前端的cookie而后台设置的cookie只有在同域的情况下才能读取到。

Cookie的属性

Name/Value

键值对,可以设置要保存的 Key/Value,注意这里的 NAME 不能和其他属性项的名字一样

Expires

过期时间,在设置的某个时间点后该 Cookie 就会失效。Cookie中的maxAge用来表示该属性,单位为秒。maxAge有3种值,分别为正数,负数和0。
如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中(每个浏览器存储的位置不一致)。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。当为0时表示立即删除cookie。为负数时到期时间为创建时间之前。运行窗口关闭后会销毁时间到期的cookie。


为负数

Domain

Domain 指定了 Cookie 可以送达的主机名。假如没有指定,那么默认值为当前文档访问地址中的主机部分(但是不包含子域名)。但不能将一个cookie的域设置成服务器所在的域之外的域。是无效的。


非服务器所在域

Path

Path 指定了一个 URL 路径,这个路径必须出现在要请求的资源的路径中才可以发送 Cookie 首部。设置为"/"表示允许所有路径都可以使用Cookie,
Domain 和 Path 标识共同定义了 Cookie 的作用域:即 Cookie 应该发送给哪些 URL。

Secure

标记为 Secure 的 Cookie 只应通过被HTTPS协议加密过的请求发送给服务端。使用 HTTPS 安全协议,可以保护 Cookie 在浏览器和 Web 服务器间的传输过程中不被窃取和篡改。

HTTPOnly

设置 HTTPOnly 属性可以防止客户端脚本通过 document.cookie 等方式访问 Cookie,有助于避免 XSS 攻击。

SameSite

SameSite 也是这篇博客的主体,首先我们来看看这个参数的作用。
SameSite 属性可以让 Cookie 在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击(CSRF)。至于什么是CSRF这里就不具体说了。
SameSite 可以有下面三种值:
1、Strict仅允许一方请求携带 Cookie,即浏览器将只发送相同站点请求的 Cookie,即当前网页 URL 与请求目标 URL 完全一致。
2、Lax允许部分第三方请求携带 Cookie
3、None无论是否跨站都会发送 Cookie
造成现在无法获取cookie是因为之前默认是 None 的,Chrome80 后默认是 Lax。

跨域和跨站

首先要理解的一点就是跨站和跨域是不同的。同站(same-site)/跨站(cross-site)」和第一方(first-party)/第三方(third-party)是等价的。但是与浏览器同源策略(SOP)中的「同源(same-origin)/跨域(cross-origin)」是完全不同的概念。
同源策略的同源是指两个 URL 的协议/主机名/端口一致。例如https://127.0.0.1:8000/它的协议是 https,主机名是127.0.0.1,端口是 8000。

同源策略作为浏览器的安全基石,其「同源」判断是比较严格的,相对而言,Cookie中的「同站」判断就比较宽松:只要两个 URL 的 eTLD+1 相同即可,不需要考虑协议和端口。其中,eTLD 表示有效顶级域名,注册于 Mozilla 维护的公共后缀列表(Public Suffix List)中,例如,.com、.co.uk、.github.io 等。eTLD+1 则表示,有效顶级域名+二级域名,例如taobao.com等。这部分内容还需要再补充。

改变

来看下从 None 改成 Lax 到底影响了哪些地方的 Cookies 的发送。


影响表

从上图可以看出,对大部分 web 应用而言,Post 表单,iframe,AJAX,Image 这四种情况从以前的跨站会发送三方 Cookie,变成了不发送。故这四种情况跨站给第三方发送 Cookie需要在设置的时候将SameSite设置为None。

谷歌浏览器中对第三方的cookie设置

SameSite by default cookies

允许第三方

把这个设置关了就允许所有的第三方cookie

Cookies without SameSite must be secure

https

这个设置就是所谓的许多博客提到的http设置SameSite=None无效必须设置Secure的原因。如果把这个设置设置为Disabled,那么http设置SameSite=None是有效的。

Enable removing SameSite=None cookies

在浏览器设置中管理第三方cookie

这个是关于第三方cookie是否可以在谷歌设置中chrome://settings/siteData单独删除第三方cookie。
开启这个设置

关掉这个设置

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容