美文网首页前端开发那些事儿
chrome: Indicate whether to send

chrome: Indicate whether to send

作者: 嘻哈章鱼小丸子 | 来源:发表于2022-01-25 16:18 被阅读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

  • Strict完全禁止第三方Cookie,跨站点时,任何情况下都不会发送Cookie。换言之,只有当前网页的URL 与请求目标一致,才会带上 Cookie
  • Lax:规则稍稍放宽,大多数情况也是不发送第三方 Cookie,但是导航到目标网址的Get 请求除外。

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

  • NoneChrome 计划将Lax变为默认设置。这时,网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。
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内嵌页面异常

相关文章

网友评论

    本文标题:chrome: Indicate whether to send

    本文链接:https://www.haomeiwen.com/subject/csvbhrtx.html