热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Chrome80版Cookie跨域,解决SamesiteLax的错误

本地局域网前后端分离的项目,前端是192.168.123.90,后端是192.168.123.2。今天早上发现用户登录报告登录失败(本质原因是无法设置cookie)。一开始以为后端


本地局域网前后端分离的项目,前端是192.168.123.90,后端是192.168.123.2。今天早上发现用户登录报告登录失败(本质原因是无法设置COOKIE)。一开始以为后端出问题了,但最近没改用户登录的相关逻辑,后来换火狐、edge 是可以的,并且有些人的 Google 可以正常登录。


有问题的Google浏览器的调试信息报告以下错误:

设置COOKIE时提示:This set-COOKIE didn't specify a "SameSite" attribute and was defaulted to "SameSite=Lax" and broke the same rules specified in the SameSiteLax value



结合以上分析,初步判断是新版的Google浏览器对于COOKIE跨域的限制问题。


经过查询资料发现:

Chrome 51开始,浏览器的COOKIE新增加了一个SameSite属性,用来防止CSRF攻击和用户追踪。该设置当前默认是关闭的

Chrome 80之后,该功能默认已开启。





1、快速解决方案


对于Google 80之后的浏览器



1.1 禁用SameSite


Google浏览器访问 chrome://flags/#same-site-by-default-COOKIEs地址,设置COOKIE的该选项为禁用,然后重启浏览器。




1.2 修改源码


set-COOKIE时,将SameSite属性值改为None, 同时将secure属性设置为true。但此时后端服务的域名必须使用https协议访问。




最佳方案是用token代替COOKIE方式作验证用户登录






2、Samesite


COOKIE 的 SameSite 属性用来限制第三方 COOKIE,从而减少安全风险。

image-20200730121143538


它可以设置三个值:





  • Strict


  • Lax


  • None




2.1 Strict


Strict最为严格,完全禁止第三方 COOKIE,跨站点时,任何情况下都不会发送 COOKIE。换言之,只有当前网页的 URL 与请求目标一致,才会带上 COOKIE。

Set-COOKIE: COOKIEName=COOKIEValue; SameSite=Strict;


这个规则过于严格,可能造成非常不好的用户体验。比如,当前网页有一个 GitHub 链接,用户点击跳转就不会带有 GitHub 的 COOKIE,跳转过去总是未登陆状态。



2.2 Lax


Lax规则稍稍放宽,大多数情况也是不发送第三方 COOKIE,但是导航到目标网址的 Get 请求除外。

Set-COOKIE: COOKIEName=COOKIEValue; SameSite=Lax;


导航到目标网址的 GET 请求,只包括三种情况:链接,预加载请求,GET 表单。详见下表。
























































请求类型

示例

正常情况

Lax

链接



发送 COOKIE

发送 COOKIE

预加载



发送 COOKIE

发送 COOKIE

GET 表单



发送 COOKIE

发送 COOKIE

POST 表单



发送 COOKIE

不发送

iframe



发送 COOKIE

不发送

AJAX

$.get("...")

发送 COOKIE

不发送

Image



发送 COOKIE

不发送


设置了StrictLax以后,基本就杜绝了 CSRF 攻击。当然,前提是用户浏览器支持 SameSite 属性。



2.3 None


Chrome 计划将Lax变为默认设置。这时,网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(COOKIE 只能通过 HTTPS 协议发送),否则无效。


下面的设置无效。

Set-COOKIE: widget_session=abc123; SameSite=None


下面的设置有效。

Set-COOKIE: widget_session=abc123; SameSite=None; Secure



参考链接:http://www.ruanyifeng.com/blog/2019/09/COOKIE-samesite.html



本文地址:https://blog.csdn.net/aoshilang2249/article/details/107687791



推荐阅读
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 如何压缩网站页面以减少页面加载时间
    本文介绍了影响网站打开时间的两个因素,即网页加载速度和网站页面大小。重点讲解了如何通过压缩网站页面来减少页面加载时间。具体包括图片压缩、Javascript压缩、CSS压缩和HTML压缩等方法,并推荐了相应的压缩工具。此外,还提到了一款Google Chrome插件——网页加载速度分析工具Speed Tracer。 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • FIN7后门工具伪装成白帽工具进行传播
    fin7,后门,工具,伪装,成,白, ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有