chrome浏览器获取不到cookie问题说明
⼀、现象chrome浏览器最新版
部分⽤户在⽤chrome浏览器审批时,在待办中调⽤服务重复302,直⾄满⼀分钟失败。点开服务详情,会看到设置cookie失败的标识⼆、原因及背景
那同样是最新版本Chrome,为什么有些⽤户不受影响?
什么是SameSite
SameSite是Cookie中的⼀个属性,它⽤来标明这个 cookie 是个“同站 cookie”,“同站 cookie” 只能作为第⼀⽅cookie,不能作为第三⽅cookie,因此可以限制第三⽅Cookie,解决CSRF的问题。早在Chrome 51中就引⼊了这⼀属性,但是不会默认设置,所以相安⽆事。
第三⽅Cookie:由当前页⾯发起的请求的 URL 不⼀定也是上的,可能有的,也可能有的。我们把发送给上的请求叫做第⼀⽅请求(first-party request),发送给和等的请求叫做第三⽅请求(third-party request),第三⽅请求和第⼀⽅请求⼀样,都会带上各⾃域名下的 cookie,所以就有了第⼀⽅cookie(first-party cookie)和第三⽅cookie(third-party cookie)的区别。上⾯提到的 CSRF 攻击,就是利⽤了第三⽅ cookie可以携带发送的特点。
“同站cookie”不是根据同源策略判断,⽽是PSL(公共后缀列表),⼦域名可以访问⽗域名cookie,但⽗域名⽆法访问⼦域名cookie。
SameSite总共有三个值:Strict、Lax、None
Strict:最为严格,完全禁⽌第三⽅ Cookie,跨站点时,任何情况下都不会发送 Cookie。换⾔之,只有当前⽹页的 URL 与请求⽬标⼀致,才会带上 Cookie。这个规则过于严格,可能造成⾮常不好的⽤户体验。
Lax:规则稍稍放宽,⼤多数情况也是不发送第三⽅ Cookie,但是导航到⽬标⽹址的 Get 请求除外。Chrome 80之后默认设置为该值。设置了Strict或Lax以后,基本就杜绝了CSRF攻击。
None:浏览器会在同站请求、跨站请求下继续发送cookies,不区分⼤⼩写。⽹站可以选择显式关闭 SameSite 属性,将其设为 None ,同时必须设置 Secure 属性(表⽰Cookie 只能通过 HTTPS 协议发送,HTTP协议不会发送),否则⽆效。
三、重复302解决办法
⽬前解决⽅法有以下三种:
1. 浏览器显式关闭该功能(由于需要每个⽤户去设置,所以不推荐)
Chrome浏览器:a) 在Chrome地址栏中输⼊: 和 b) 将指定选项设置为Disabled 后,重启浏览器
Safari浏览器:“偏好设置”-“隐私”,去掉「阻⽌跨站跟踪」的勾选
2. 更改后端设置cookie的地⽅,设置响应header,关闭SameSite属性
这⾥注意⼀点Secure属性,这个属性说明设置的该cookie只能在https下传输,因为SameSite=None 要求必须要和Secure=true⼀起使⽤,所以采⽤这个⽅法解决,嵌⼊iframe的页⾯必须使⽤https。
Set-Cookie:
JSESSIONID=8479f54ed4104e21a91bc261591e7347; Path=/; HttpOnly; Secure; SameSite=None
3.更改iframe嵌⼊⽅式
废弃采⽤cookie来做权限认证。改⽤token鉴权来实现。
四、需要注意事项
chrome浏览器在⽆痕模式下默认是阻⽌第三⽅cookie的
不过可以通过点击右上⾓的闭着的⼩眼睛:
再点击允许使⽤ Cookie,当前站点就⼜允许第三⽅ Cookie 了:
不过当你关闭⽆痕窗⼝后,这些设置都不会保留,下次打开依然会屏蔽第三⽅ Cookie。所以如果⾮要⽤⽆痕模式的话,就改浏览器关于cookie的设置,允许所有cookie。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论