1

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

  1. 用户通过电子邮件中的链接访问https://mercury.co/reset-password
  2. 浏览器从该 URL 加载 Javascript 以设置站点
  3. 客户端执行 GET 请求,该请求在 cookie 中返回 CSRF 令牌。此令牌具有 SameSite Lax 属性集。
  4. 预期行为:客户端可以读取其中包含 CSRF 令牌的 cookie。实际行为:客户端无法读取cookie。我们通过执行 alert(document.cookie) 确定了这一点,并且当设置了相同站点松懈时看到 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 中。
4

2 回答 2

1

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

这已在 77 版中修复,这解释了为什么 iOS 12.3.1 中不会出现该错误。

于 2020-09-02T09:50:56.210 回答
0

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

于 2019-06-01T15:45:05.147 回答