响应设置的cookie的samesite属性不会被tomcat的cookieprocessor修改

时间:2020-02-13 18:51:11

标签: google-chrome tomcat cookies samesite

最近,浏览器正在通过将samesite cookie默认值增强为Lax来提高安全性,以防止CSRF攻击,即,如果服务器在通过响应set-cookie标头设置cookie时未设置samesite属性,浏览器会将其视为Lax,而不是存储,因此在后续调用中,如果这些请求失败,则cookie不会发送回服务器。这是在跨域通信中发生的,其中跨域应用程序在主网站的iFrame中运行。

我们有一个这样的服务器应用程序,它在成功的身份验证请求的响应上设置两个cookie,并且应该将这些cookie随每个后续调用一起发送回服务器,以使服务器认为请求已被身份验证以进行进一步处理。这些Cookie没有显式设置任何samesite属性,因此新的浏览器(Chrome 80)不会在后续调用中将它们发送回去。

服务器应用程序托管在tomcat上。因此,为了缓解此问题,我们使用了tomcat的cookieprocessor将cookie的samesite属性设置为“ none”,以便进行跨域调用。不幸的是,这没有用。尽管通过cookieprocessor显式设置了samesite属性,但通过开发人员工具进行检查时,响应并未显示出samesite属性的任何痕迹。

所以这里的问题是:我是否正确地认为tomcat应该修改服务器的响应,以便将相同站点属性添加到通过响应上的set-cookie标头设置的cookie中?我尝试通过设置远程调试来调试cookieprocessor代码,但是看起来响应没有被拦截,因此cookie标头被修改了。我在这里做错了什么?

注意:我已经在应用程序的meta-inf / context.xml中配置了Cookie处理器。

2 个答案:

答案 0 :(得分:3)

那么您正在使用Tomcat,但是您正在使用哪个版本的Tomcat?

CookieProcessor SameSite支持的初始版本使用“无”来指代取消设置SameSite值的行为。

https://bz.apache.org/bugzilla/show_bug.cgi?id=63865

Fixed in:
- master for 9.0.28 onwards
- 8.5.x for 8.5.48 onwards

我不确定Tomcat的CookieProcessor是否考虑了客户端的用户代理。

如果以这种方式实现,则您的应用程序可能不支持已知的不兼容客户端:Chrome 51-66,MacOSX Mojave(10.14)Safari /嵌入式,iOS 12、12.13.2之前的UCBrowser

https://www.chromium.org/updates/same-site/incompatible-clients

我们使用addHeader支持SameSite解决了我们的常规Cookie。

我们在nginx层中解决了会话cookie。

对于JSESSIONID,似乎每次创建新会话时,您也可以使用Filter来包装HttpServletRequest,以附加具有适当属性的会话cookie副本。尽管它为覆盖的JSESSIONID添加了〜80B。

答案 1 :(得分:2)

我实际上自己解决了这个谜。 Cookieprocessor仅在通过response.addCookie()方法添加cookie时才有效。因此,如果cookie是通过set / add标头方法设置的,则cookieporcessor不会执行任何操作。实际上,我们的服务器应用程序执行标头方法来添加cookie,而不是addCookie()方法。