前端开发那些事儿

chrome: Indicate whether to send

2022-01-25  本文已影响0人  嘻哈章鱼小丸子
问题描述

访问一个内嵌iframehtml 页面,iframe 指向的地址是一个完整的系统,有登录注册等页面。登录的时候发现始终失败,页面不跳转,chrome 报错如下:

error
cookie 跨域了,带不过去。

But ,内嵌的系统单独可以正常运行,火狐浏览器可以正常运行。

chrome 版本:

chrome
原因分析

Google在2020年2月4号发布的 Chrome 80 版本中默认屏蔽所有第三方Cookie,即默认为所有 Cookie 加上 SameSite=Lax 属性,并且拒绝非SecureCookie设为 SameSite=None

解决办法
1 设置cookie属性SameSite=None and Secure ---最根本也是最推荐的

其实这是chrome 浏览器给的解决办法。

SameSite

那么SameSiteSecure到底是什么意思呢?

Secure

安全性,指定Cookie只能通过https协议访问,一般的Cookie使用HTTP协议即可访问。设置了Secure (没有值),只有当使用https协议连接时cookie才可以被页面访问。可用于防止信息在传递的过程中被监听捕获后信息泄漏

SameSite

Chrome浏览器51版本后为 Cookie 新增的属性,用来防止 CSRF 攻击和用户追踪,从源头屏蔽 CSRF漏洞。可以设置三个值:StrictLaxNone

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

HttpOnly

当然,Cookie能够获取有一个大前提,不设置HttpOnly 属性。如果在Cookie中设置了HttpOnly属性,通过程序(JS脚本、Applet等)将无法读取到Cookie信息,防止程序获取cookie后进行攻击

配置的SecureSameSiteHttpOnly值,均可以在chrome里看到:HttpOnly属性会打勾。

cookie
所以,这个办法还要配合升级https协议才可以哦。

SecureSameSitenginx配置如下:

http {
  map $http_user_agent $samesite_attr {
    "~*chrome"  ';Secure;SameSite=None';
  }

  server {
    location / {
      ...
      proxy_cookie_path ~/(.*) "/$1$samesite_attr";
    }
  }
}
2 将两个系统部署在同一台服务器或通过nginx转发,通过相同IP同源策略传送cookie。---次优解决办法
3 既然这个问题是谷歌浏览器特有的,可以不使用谷歌浏览器或者将谷歌浏览器降级到 Chrome 79 及以下版本,并关闭自动更新。

不是很建议,毕竟是前端,怎么着也得搞定浏览器兼容性吧,而且不能阻止客户不用呀。

参考:
nginx 为chrome客户端请求加SameSite=None;Secure
chrome浏览器跨域Cookie的SameSite问题导致访问iframe内嵌页面异常

上一篇下一篇

猜你喜欢

热点阅读