作者:苏道军于 2020年03月26日 发布在分类 / 产品相关 / 周边介绍 下,并于 2020年03月26日 编辑
    Chrome 中 Set-Cookie SameSite 问题

       267

       0


    关于 “Chrome 修改对未设置 SameSite 的 cookie,视作 SameSite:Lax 处理的变更” 的问题,目前看,最妥善的解决方案还是按照规矩办事儿,目前 Chrome 是行动最快的,而 FireFox 和 Edge 也在积极跟进,持支持态度。


    影响范围:

    如果你的项目中有如下跨域场景:

    1. 跨域的 ajax 请求;
    2. 跨域嵌入的 iframe;
    3. 跨域的图片资源请求;
    4. 跨域的 POST FORM 表单;

    如果存在这类跨域场景,且在服务端接收请求的时候,需要使用流量中的 cookie,则需要注意:这个 cookie 在设置的时候,是否明确有:SameSite:None; Secure这两个属性。如果没有的话,就会受到此策略影响。

    例子:

    在a.com的页面中,加载b.com的 iframe,且希望 iframe 请求的流量中,携带b.com的 cookie,用其中的login_token作为登录凭证。

    +------------------+ +-----------------+ | a.com | | b.com | | +------------+ | cookie: | | | | | | login_token | | | | <iframe> +----------x-----------> | | | | | | | | +------------+ | | | +------------------+ +-----------------+ +----------------------------------------------------------+ | Set-Cookie: login_token=x.xxxxxx; path=/; domain=b.com | +----------------------------------------------------------+ 

    如果此token的 cookie 在设置的时候,未指明SameSite:None; Secure这两个属性,如:

    set-cookie: login_token=x.xxxxxx; path=/; domain=b.com 

    则实际请求中,不会携带login_token这条 cookie,因此,iframe 实际处于未登录状态。

    其他场景,如 Ajax,与此同理。


    变更:

    在旧策略中,当 set-cookie 时不显式声明SameSite时(或只声明SameSite,未使用Secure时),浏览器会自动视为SameSite:None,即不限制 cookie。此时上面场景中的 cookie 是可以正常发送的。

    在新策略中,如上场景,会视为SameSite:Lax,即只有在特定情况下,才会携带 cookie。上面场景中的 iframe 的请求中,不会携带 cookie。


    解决

    最正当的解决方法,就是在对需要跨域发送的 cookie 进行 set-cookie 的时候,显式声明SameSite:None; Secure属性,如:

    set-cookie: ck01=vl01; Path=/; Secure; SameSite=None 

    通过此种方法,允许 cookie 随跨域流量发送。

    否则,只能通过调整域、以及携带参数的方式解决。

    临时的解决方案,可以暂时让出现问题的浏览器,通过设置解决,方式如下:

    1. 在 chrome 地址栏输入chrome://flags
    1.png
    1. 在配置项中,搜索samesite
    2.png
    1. 将以下几项,设置为disabled
    3.png
    1. 重启浏览器
    访问权限

    创建人 苏道军
    文档编辑权限 来自分类
    文档阅读权限 来自分类
    分类阅读权限 所有人
    分类编辑权限 所有人
    分类审核权限
    标签

    cookie samesite 解决 请求 iframe 场景 携带 设置 login_token secure
    历史版本

    修改日期 修改人 备注
    2020-03-26 21:32:26[当前版本] 苏道军 CREAT
    同类知识
    相关知识

    MIOTO WIKI-V3.2.0