美文网首页前端开发那些事儿
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