ios - 为什么在从 Gmail iOS 应用程序打开链接时无法读取 SameSite Lax cookie 的内容?

标签 ios cookies gmail samesite

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

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

这会导致下一个 POST 请求失败,因为它无法获取要发送到服务器的 CSRF token 。但是,如果您查看请求中发送的 cookie,它会包含其中包含 CSRF token 的 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 或任何内容。我们也不允许通过 header 将我们的网站包装在 iframe 中。

最佳答案

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

这是 fixed in release 77 ,这就解释了为什么 iOS 12.3.1 中没有出现该错误。

关于ios - 为什么在从 Gmail iOS 应用程序打开链接时无法读取 SameSite Lax cookie 的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56408138/

相关文章:

ios - 使用 Firebase token 更新新版本后,应用程序不会收到推送通知。苹果/swift

iphone - RestKit:请求失败时获取HTTP状态码

cookies - 如何将 Scrapy 登录 cookie 传递给 Selenium?

c# - 使用 C# 为通过 Gmail 发送的邮件设置不同的 "From"地址

ios - 在 iOS 应用内购买中恢复购买

ios - [UIViewController TableView :numberOfRowsInSection:]: unrecognized selector sent to instance

javascript - session 关闭后 Cookie 未被删除

python - 为什么 session cookie 在从域提供服务时有效,但在使用 IP 时无效?

javascript - nodemailer - anchor 标记不起作用

google-analytics - 如何通过分析代码段跟踪来自Google Analytics(分析)报告的gmail登录用户的电子邮件?