解决新版chrome跨域问题:cookie丢失以及samesite属性问题

简介: 解决新版chrome跨域问题:cookie丢失以及samesite属性问题

最近在使用前后端分离开发的时候,遇到了一个诡异的问题,无论如何设置跨域,同一个页面获取到的session始终不一致。


发现问题:


登录界面前后端分离,ajax提交登录时出错

验证码接口和登录接口的session不一致(跨域问题)

在网上搜索跨域问题,重新设置,问题依旧


错因排除:


ajax允许cookie(已经设置 xhrFields: { withCredentials: true} )

springboot尝试设置了多种跨域方法(springboot解决跨域)


深入分析:


使用其它浏览器(firefox, ie),session却是一致的


对比chrome和firefox请求头和响应头:


firefox:首次发起请求后,服务端返回sessionId后,之后每次请求中的cookie都会带上sessionId。

chrome:请求头始终未携带sessionId,甚至整个cookie都为空,导致服务器每次都接受不到sessionId,每次都会重新分配 一 个 session。


探寻解决方案:


在配置类中设置SameSite=null:

@Configuration
public class SpringSessionConfig {
  @Bean
  public CookieSerializer httpSessionIdResolver() {
    DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
    ...
    cookieSerializer.setSameSite(null);
    ...
  }
}


注意,你的项目如果未做session分布式管理,可能需要引入以下依赖才能使用上述类。至于不同Chrome版本号的问题可以参考这篇文章:关于解决Chrome新版本中cookie跨域携带和samesite的问题处理

<!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-core -->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-core</artifactId>
    <version>2.1.4.RELEASE</version>
</dependency>

最终解决方案:


继续查找资料的时候,幸运的找到了github上对于该问题的探究:New cross-site cookie not ‘SameSite’ warning in Chrome


看到其中的一条解决方案: 禁用chrome samesite。方法如下:


1.在chrome中打开链接: chrome://flags/#site-isolation-trial-opt-out,搜索samesite


8e29d00bb236474dbd7a61baecbdc169.png

2.将上述三个选项禁用(设为disable)后重启chrome,问题解决


f1b7af3ab8ec42e89a3b96614a62a1ad.png


总结:


存在即合理,SameSite的设计初衷是为了防止CSRF攻击,禁用SameSite实际上并没有解决问题,属于下下策。这里提供一下我的理解,SameSite为了防止CSRF攻击,加强了对cookie的管理,防止用户带着cookie去访问第三方网站,而这又涉及到了跨域问题。然而,我们不可能要求用户像我们一样去禁用新版chrome的SameSite,目前的建议就是在header中设置samesite,即上述的response.setHeader("Set-Cookie",

"HttpOnly;Secure;SameSite=None")后,使用https传输cookie。



目录
相关文章
|
3月前
|
Web App开发 前端开发
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
152 0
|
2月前
|
Web App开发 存储 前端开发
【JavaEE初阶】 CSS相关属性,元素显示模式,盒模型,弹性布局,Chrome 调试工具||相关讲解
【JavaEE初阶】 CSS相关属性,元素显示模式,盒模型,弹性布局,Chrome 调试工具||相关讲解
|
9月前
|
Web App开发
【cookie处理】79chrome浏览器 -允许浏览器cookie策略处理
【cookie处理】79chrome浏览器 -允许浏览器cookie策略处理
|
6月前
|
存储 JavaScript 前端开发
什么是 cookie 的 httponly 属性
什么是 cookie 的 httponly 属性
60 0
|
6月前
|
Web App开发 存储 JSON
Chrome 开发者工具 network 标签页里获取到的 cookie 字段在 Postman 里的应用
Chrome 开发者工具 network 标签页里获取到的 cookie 字段在 Postman 里的应用
57 1
|
10月前
|
存储 安全 Java
网站安全测试,会话 cookie 中缺少 HttpOnly 属性
可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务 “HttpOnly”属性的会话 cookie。由于此会话 cookie 不包含“HttpOnly”属性,因此 注入站点的恶意脚本可能访问此 cookie,并窃取它的值。任何存储在会话令牌中的 信息都可能被窃取,并在稍后用于身份盗窃或用户伪装。
488 0
|
11月前
|
Java
会话技术概述、Cookie常用属性和方法及Session常用方法和生命周期
会话技术概述、Cookie常用属性和方法及Session常用方法和生命周期
112 0
|
11月前
|
Web App开发 存储 JSON
Chrome 开发者工具 network 标签页里获取到的 cookie 字段在 Postman 里的应用
Chrome 开发者工具 network 标签页里获取到的 cookie 字段在 Postman 里的应用
|
存储 Web App开发 编解码
浏览器原理 32 # 跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性?
浏览器原理 32 # 跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性?
100 0
浏览器原理 32 # 跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性?
|
Web App开发 存储 JavaScript
chrome插件获取window挂载的属性
chrome插件获取window挂载的属性