`

Chrome 80 SameSite

 
阅读更多

 

新项目要嵌入之前的一个项目,而且该被嵌入项目之前提供给第三方使用,他们也是用的iframe。以前都是好的,但是现在发现要是iframe的地址和父级的地址不同源,项目登录时无法设置cookie。

 

一开始以为后端出问题了,后来换火狐、ie edge 都是可以的,并且其他人的Chrome也有可以用的。

 

并且接口设置cookie时提示:“this set-cookie didnot specify a "sameSite" attribute and was defaulted to "sameSite=Lax" and broke the same rules specified in the SameSiteLax value”。

 

从Chrome 51开始,浏览器的Cookie新增加了一个SameSite属性,用来防止CSRF攻击和用户追踪。

该设置当前默认是关闭的,但在Chrome 80之后,该功能默认已开启。

 

所以当你无法使用某些网站第三方登录功能的时候,请查看一下是否受到了该设置的影响。

 

对于使用者,快速解决方案:

方案1. 打开Chrome设置,将chrome://flags/#same-site-by-default-cookies禁用,然后重启浏览器。

 

package org.pentaho.platform.web.http.filters;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

public class SameSiteNoneFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        chain.doFilter(request, new SameSiteNoneHttpServletResponseWrapper((HttpServletResponse) response));
    }

    @Override
    public void destroy() {
    }
}

 

...

package org.pentaho.platform.web.http.filters;


import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import javax.ws.rs.core.HttpHeaders;

public class SameSiteNoneHttpServletResponseWrapper extends HttpServletResponseWrapper {

    private final HttpServletResponse response;

    public SameSiteNoneHttpServletResponseWrapper(HttpServletResponse response) {
        super(response);
        this.response = response;
    }

    @Override
    public void sendRedirect(String location) throws IOException {
        addSameSiteCookieAttribute();
        super.sendRedirect(location);
    }

    @Override
    public void sendError(int sc) throws IOException {
        addSameSiteCookieAttribute();
        super.sendError(sc);
    }

    @Override
    public void sendError(int sc, String msg) throws IOException {
        addSameSiteCookieAttribute();
        super.sendError(sc, msg);
    }

    @Override
    public PrintWriter getWriter() throws IOException {
        addSameSiteCookieAttribute();
        return super.getWriter();
    }

    @Override
    public ServletOutputStream getOutputStream() throws IOException {
        addSameSiteCookieAttribute();
        return super.getOutputStream();
    }

    private void addSameSiteCookieAttribute() {
        Collection<String> headers = this.response.getHeaders(HttpHeaders.SET_COOKIE);
        boolean firstHeader = true;
        for (String header : headers) { // there can be multiple Set-Cookie attributes
            String flags;
            if (header.contains("Secure;")) {
                flags = "SameSite=None";
            } else {
                flags = "Secure; SameSite=None";
            }
            if (firstHeader) {
                this.response.setHeader(HttpHeaders.SET_COOKIE, String.format("%s; %s", header, flags));
                firstHeader = false;
                continue;
            }
            this.response.addHeader(HttpHeaders.SET_COOKIE, String.format("%s; %s", header, flags));
        }
    }
}

 

web.xml

  <filter>
    <filter-name>SameSite Filter</filter-name>
    <filter-class>org.pentaho.platform.web.http.filters.SameSiteNoneFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>SameSite Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

 

...

 

 

分享到:
评论

相关推荐

    chrome-same-site

    将指定网站上的 Cookie 恢复为旧版 SameSite 行为,下载之后将baidu.com改为自己需要设置的域名

    SameSite .NET Core(2.1/2.2/3.0/3.1)源码

    SameSiteCookiesServiceCollectionExtensions.cs 解决 Chrome 等浏览器因为 SameSite 导致的问题。 使用方法参见:https://asdfg.blog.csdn.net/article/details/108514763

    CookieFix:修复Magento2.22.32.4 Cookie SameSite属性

    自Chrome 80以来,此扩展程序正在调整Cookie SameSite属性问题。 注意:此扩展名是实验性的。 特征 将SameSite属性添加到Magento会话cookie中。 对于3DS付款,付款网关倾向于通过POST将请求发送到基于Magento的网站...

    should-send-same-site-none:一个简单的实用程序,用于为“ SameSite = None” cookie属性检测不兼容的用户代理

    )背景在2020年2月推出的Chrome 80中,Chrome会将未声明SameSite值的Cookie视为SameSite=Lax Cookie。 预计其他浏览器供应商将效仿Google的领导。 (请参阅此)。 如果您管理跨站点Cookie,则需要应用SameSite = ...

    GoogleChrome-87.0.4280.67.dmg

    mac跨域问题: 在目录/Users/...打开chrome 输入 chrome://flags/ 搜索 SameSite by default cookies 找到SameSite by default cookies和Cookies without SameSite must be secure 将上面两项设置为 Disable

    samesite cookie安全特性

    Chrome 这几天发布的 80 版本更新了 “Same Site Cookie” 的安全特性 下面是一篇介绍文章 ...这个特性会导致: ...如果网站需要跨域分享数据,则设置相关cookie的samesite属性为none 作者:深入浅出0

    重定向问题解决.docx

    Google chrome 80版本 将您重定向的次数过多 Google chrome 80版本 将您重定向的次数过多

    ndelius-new-tech:nDelius新技术

    对Chrome的更改意味着我们必须默认禁用Cookie才能禁用SameSite,以便在本地运行该项目。 去做这个; 在Chrome中访问: chrome:// flags / 默认情况下将SameSite Cookie更改为“已禁用” Elasticsearch和MongoDB ...

    oidc.example:http的OIDC(OpenID Connect)示例

    :warning: 禁用chrome samesite进行测试: chrome:// flags /#same-site-by-default-cookies docker-compose.yml(docker平台) # # start docker docker-compose up --detach --build # # stop docker docker-...

    一键开启预发布-crx插件

    语言:中文 (简体) 一键开启预发布 0.0.3版本解决了chrome 80后cookie sameSite Scure的问题

    polestar

    如果您使用的是Chrome浏览器,请转到:chrome:// flags并禁用“没有SameSite的Cookie必须安全”。 出于某些愚蠢的原因,chrome在.local域上强制执行此操作。 FireFox足够聪明,不会将其搞砸。 约定和布局 我们的...

    XDEALER.PRO-crx插件

    )5.3.5新网站设计兼容错误修复5.3.4新网站设计支持5.3.3 Chrome 80.x兼容,Samesite支持5.3.2组织不需要的可用性(标签)扩展5.3.1更改设计要从Chrome工具栏图标设计5.3.0新猎犬实验5.2.10新功能β版本联系准备...

    jwtbutler::old_key:在多域环境中使用jwt进行单点登录。 :old_key:

    全面的Chrome支持(SameSite = None) 要求 具有以下路由的完全设置的jwt身份验证服务器(如 ) 路线 方法 论点 标头 回复 /登录 邮政 邮箱密码 -- ([ 'success' =&gt; true, 'message' =&gt; 'auth successful', '...

    e-hentai-view:ExHentai的移动网站,使用Next.js构建

    如果Google Chrome版本&gt; = 84,则需要使用Secure和SameSite=None更改exhentai.org cookie, 屏幕截图 用法 由于浏览器(cors)中的webSecurity,我们无法直接访问exhentai图像,因此,在使用该网站之前,您应该登录...

    Convert Experience Tools-crx插件

    语言:English ... 在“转换体验”内部以及可视化编辑器的一部分中,体验设置的质量保证和设计过程中...由于我们协助iframe,x-header和SameSite Cookie的设置,因此将您正在使用的域和子域列入白名单可让您在应用程序编辑

    webextension-allow-sso-iframes:一个WebExtension,可通过更改请求标头来允许sso登录页面的iframe

    它执行以下操作: 删除所有x-frame-options响应标头删除所有content-security-policy响应标头更改所有set-cookie响应标头以设置SameSite=None (这也需要为cookie设置Secure标志) 如果sec-fetch-dest请求标头等于...

    Live Helper Chat-crx插件

    // @ini_set('session.cookie_samesite','none'); // @ini_set('session.cookie_secure',true); 1.2V. 现在它可以监控您的计算机空闲时间并自动更改状态。 您可以在扩展选项中更改。 1.1V. Autologin也支持。...

    Spectroscope-crx插件

    该工具可识别哪些资源不受Google Chrome中启用的默认保护(跨域读取阻止,SameSite Cookie),并且可以跨站点嵌入。 结果将添加到Chrome的DevTools“ Spectroscope”面板中,并包含安全建议,以帮助保护您的资源免受...

    单点登录助手-crx插件

    Previously, we released versions of this extension for both Chrome and Firefox that share the same code base, so that functionality and user experience will be very similar between those two browsers...

Global site tag (gtag.js) - Google Analytics