`

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>

 

...

 

 

分享到:
评论

相关推荐

    Google chrome 80版本Google chrome 80版本 重定向问题解决.docx

    在Google Chrome 80版本中,默认情况下,所有未明确声明SameSite属性的cookies都会被视为“SameSite=Lax”,这意味着它们不会在跨站请求(如第三方脚本、iframe或链接点击)中发送,以此来增强网站的安全性,防止...

    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的网站...

    chrome80-win32.zip

    新的"SameSite" Cookie政策默认设置为"Lax",这限制了第三方Cookie的跨站点追踪,增强了用户的隐私保护。 2. **HTTPS优先**:此版本开始,默认情况下,Chrome会将非HTTPS链接重定向到相应的HTTPS版本,以促进更安全...

    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

    lift-samesite-cookie-workaround

    在Chrome浏览器的一次更新中,默认SameSite属性被设为`Lax`,这导致了一些使用旧代码的网站出现问题,因为它们可能依赖于默认的无限制行为。"lift-samesite-cookie-workaround"项目就是为了应对这种情况,提供了一种...

    ndelius-new-tech:nDelius新技术

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

    一键开启预发布-crx插件

    自Chrome 80开始,谷歌增强了对cookie的安全控制,引入了新的SameSite和Secure属性策略。SameSite属性用于限制第三方cookie的发送,防止跨站请求伪造(CSRF)攻击。Secure属性则要求cookie只能在HTTPS协议下传输,以...

    【ASP.NET编程知识】iframe跨域与session失效问题的解决办法.docx

    深入分析:出于隐私安全的考虑,IE 会丢失 Iframe 中的 Cookie,IE6/IE7 支持的 P3P(Platform for Privacy Preferences Project specification)协议默认阻止第三方无隐私安全声明的 Cookie,Firefox、Chrome 不...

    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-...

    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请求标头等于...

Global site tag (gtag.js) - Google Analytics