从Gmail iOS应用程序打开链接时,为什么不能阅读SameSite Lax cookie的内容?

时间:2019-06-01 15:45:05

标签: ios cookies gmail samesite

我公司的网站(mercury.co)通过电子邮件将密码重置链接发送给用户。我们遇到了一些非常奇怪的行为,这些行为只能在与SameSite Lax属性相关的Gmail iOS应用中重现:

  1. 用户点击电子邮件中指向https://mercury.co/reset-password
  2. 的链接
  3. 浏览器从该URL加载Javascript以建立网站
  4. 客户端执行GET请求,该请求在cookie中返回CSRF令牌。此令牌设置了SameSite Lax属性。
  5. 预期的行为:客户端可以读取其中包含CSRF令牌的cookie。实际行为:客户端无法读取cookie。我们通过执行alert(document.cookie)来确定这一点,并看到在设置了相同站点松驰时CSRF令牌不存在,而在未设置相同站点属性时则存在CSRF令牌。

这将导致下一个POST请求失败,因为它无法将CSRF令牌发送到服务器。不过,如果您查看请求中发送的cookie,它会包含其中包含CSRF令牌的cookie。

我的理解是cookie应该是可读的,因为在这种情况下它不是跨站点的。而且它当然不应该不可读,然后在下一个请求时发送到服务器。

我的理解是SameSite Lax cookie不应阻止客户端读取此cookie。

作为修复,我们确定在此特定cookie上不需要SameSite Lax属性。但是,我们仍然想了解此问题的根本原因。

一些到目前为止详细介绍了我们的调查:

  • 我们只能在iOS Gmail应用中重现该问题。我们无法通过创建自己的UIWebview或WKWebview(我在iOS 12.2的iOS模拟器中运行)来重现该问题。我们无法在我们测试过的两个iPad上重现它(尽管它们可能是不同的iOS版本)。我在运行iOS 12.2的iPhone上进行了测试
  • 基于以下方法:https://stackoverflow.com/a/18678703/1176156在Gmail中运行时,我们的应用程序未嵌入iframe或其他任何内容。我们也不允许通过标头将网站包装在iframe中。

2 个答案:

答案 0 :(得分:1)

您大多回答了自己的问题(并向我指出了正确的方向:-))。 为了完整起见,我发现了相关的错误:Safari (still) doesn't send Lax cookies after a cross-site redirection

这是fixed in release 77,这说明了为什么该错误在iOS 12.3.1中没有发生。

答案 1 :(得分:0)

事实证明,这肯定是iOS 12.2中的错误,因为我无法再在iOS 12.3.1中重现此行为。但是,我找不到足够详细的iOS更新日志来显示此修复程序,并且在Webkit changelog中没有发现任何相关内容。