为什么在从 Gmail iOS 应用程序打开 link 时无法读取 SameSite Lax cookie 的内容?
Why can't I read the contents of a SameSite Lax cookie when opening a link from the Gmail iOS App?
我公司的网站 (mercury.co) 通过电子邮件向用户发送密码重置 links。我们 运行 发现了一些非常奇怪的行为,我们只能在与 SameSite Lax 属性相关的 Gmail iOS 应用程序中重现这些行为:
- 用户在他们的电子邮件中关注 link 至 https://mercury.co/reset-password
- 浏览器从 URL 加载 Javascript 以设置站点
- 客户端执行 GET 请求,其中 returns cookie 中的 CSRF 令牌。此令牌设置了 SameSite Lax 属性。
- 预期行为:客户端可以读取其中包含 CSRF 令牌的 cookie。实际行为:客户端无法读取 cookie。我们通过执行警报 (document.cookie) 来确定这一点,当设置 same-site lax 时看到 CSRF 令牌不存在,但是当未设置 same-site 属性时它存在。
这会导致下一个 POST 请求失败,因为它无法获取要发送到服务器的 CSRF 令牌。但是,如果您查看请求中发送的 cookie,它会包含其中包含 CSRF 令牌的 cookie。
我的理解是 cookie 应该是可读的,因为在这种情况下它不是 cross-site。而且它肯定不应该是不可读的,然后在下次请求时发送到服务器。
我的理解是 SameSite Lax cookie 不应阻止客户端读取此 cookie。
作为修复,我们已确定我们不需要此特定 cookie 的 SameSite Lax 属性。但是,我们仍然想了解此问题的根本原因。
到目前为止我们调查的一些细节:
- 我们只能在 iOS Gmail 应用程序中重现该问题。我们无法通过创建自己的 UIWebview 或 WKWebview 来重现该问题(我在 iOS 模拟器中为 iOS 12.2 运行)。我们无法在我们测试的两台 iPad 上重现它(尽管它们可能是不同的 iOS 版本)。我在 iPhone 运行ning iOS 12.2
上进行了测试
- 基于使用此方法: 当 运行 在 Gmail 中时,我们的应用程序未嵌入 iframe 或任何内容。我们也不允许通过 header.
将我们的网站包装在 iframe 中
事实证明,这一定是 iOS 12.2 中的错误,因为我无法再在 iOS 12.3.1 中重现此行为。不过,我找不到足够详细的 iOS 更新日志来显示此修复,而且我在 Webkit changelog.
中没有找到任何相关内容
您基本上回答了您自己的问题(并为我指出了正确的方向:-))。
为了完整起见,我发现了相关的错误:Safari (still) doesn't send Lax cookies after a cross-site redirection.
这是 fixed in release 77,这解释了为什么 iOS 12.3.1 中没有出现错误。
我公司的网站 (mercury.co) 通过电子邮件向用户发送密码重置 links。我们 运行 发现了一些非常奇怪的行为,我们只能在与 SameSite Lax 属性相关的 Gmail iOS 应用程序中重现这些行为:
- 用户在他们的电子邮件中关注 link 至 https://mercury.co/reset-password
- 浏览器从 URL 加载 Javascript 以设置站点
- 客户端执行 GET 请求,其中 returns cookie 中的 CSRF 令牌。此令牌设置了 SameSite Lax 属性。
- 预期行为:客户端可以读取其中包含 CSRF 令牌的 cookie。实际行为:客户端无法读取 cookie。我们通过执行警报 (document.cookie) 来确定这一点,当设置 same-site lax 时看到 CSRF 令牌不存在,但是当未设置 same-site 属性时它存在。
这会导致下一个 POST 请求失败,因为它无法获取要发送到服务器的 CSRF 令牌。但是,如果您查看请求中发送的 cookie,它会包含其中包含 CSRF 令牌的 cookie。
我的理解是 cookie 应该是可读的,因为在这种情况下它不是 cross-site。而且它肯定不应该是不可读的,然后在下次请求时发送到服务器。
我的理解是 SameSite Lax cookie 不应阻止客户端读取此 cookie。
作为修复,我们已确定我们不需要此特定 cookie 的 SameSite Lax 属性。但是,我们仍然想了解此问题的根本原因。
到目前为止我们调查的一些细节:
- 我们只能在 iOS Gmail 应用程序中重现该问题。我们无法通过创建自己的 UIWebview 或 WKWebview 来重现该问题(我在 iOS 模拟器中为 iOS 12.2 运行)。我们无法在我们测试的两台 iPad 上重现它(尽管它们可能是不同的 iOS 版本)。我在 iPhone 运行ning iOS 12.2 上进行了测试
- 基于使用此方法: 当 运行 在 Gmail 中时,我们的应用程序未嵌入 iframe 或任何内容。我们也不允许通过 header. 将我们的网站包装在 iframe 中
事实证明,这一定是 iOS 12.2 中的错误,因为我无法再在 iOS 12.3.1 中重现此行为。不过,我找不到足够详细的 iOS 更新日志来显示此修复,而且我在 Webkit changelog.
中没有找到任何相关内容您基本上回答了您自己的问题(并为我指出了正确的方向:-))。 为了完整起见,我发现了相关的错误:Safari (still) doesn't send Lax cookies after a cross-site redirection.
这是 fixed in release 77,这解释了为什么 iOS 12.3.1 中没有出现错误。