带有凭据的AJAX不会在Safari中传递Cookie

问题描述 投票:0回答:1

我在example.com上托管了一个单页静态应用。我用于该应用程序的服务器托管在server.com上。我将这两项服务完全分开,并且它们可以通过这种方式进行不同的扩展。当用户想要登录时,其用户名和密码将传递给yoyoma.com,并使用access_token在server.com上设置cookie。然后,该用户将重定向到example.com,并且现在已登录。

现在可以从example.com上的静态应用程序中,使用Credentials = true设置对server.com的AJAX请求,以便将我们设置的access_token传递到server.com。在Safari之外的所有浏览器中,它都能完美运行。我使Safari正常工作的唯一方法是转到首选项->隐私->禁用“防止跨站点跟踪”。我知道cookie是在server.com上设置的,但不会随AJAX请求一起传递。苹果公司认为这似乎是某些隐私功能很棒,但是您应该如何解决此问题。我不是广告服务,我没有做任何恶作剧,只是想让我的应用正常工作。我特别想在服务器位于不同域的情况下构建一个单页应用程序。在Safari中是否可能这样做,或者其隐私设置使其无法实现?

[注意:我还应该向安全狂热者提及,设置了access_token cookie后,用户将使用CSRF令牌重定向到example.com。标头在每个AJAX请求中传递此csrf令牌,以防止跨站点请求伪造。

ajax cookies safari cross-domain csrf
1个回答
0
投票
1将example.com重定向到呈现server.com/login的服务器以创建httpOnly cookie,然后将其重定向回SPA中的登录状态。

据我所知,在Safari中启用Prevent cross-site tracking时,其目的是在允许发送Cookie之前让用户与其他域进行交互。通过重定向它们,该意图已经创建,并且设置cookie应当没有问题,并且可以由example.com发送它。

但是它确实有其自身的局限性https://webkit.org/wp-content/uploads/tracking-prevention-timeline.png

Read more

2查看与StorageAccess相关的讨论,因为此处的想法是与依赖来自不同域的cookie的第三方身份验证解决方案一起使用。 Safari ITP使得这些功能变得更难使用,因此其想法是与供应商合作,以寻求比LocalStorage更好的解决方案。

3将密钥存储在LocalStorage中,并审查所有来自您的运行中的javascript代码,并确保在处理用户创建的值时遵循最佳做法。

LocalStorage使您可能遭受XSS攻击,但Cookies使您遭受CSRF攻击。您必须减轻这些负担,但并不太难,但是请记住,在使用Cookie时已引入了这些向量。

发生的任何XSS都结束了,即使使用httpOnly cookie。忘记您的身份验证密钥,运行攻击者代码可能会造成更大的破坏。

使用用户名/密码的键盘记录器

    如果攻击在经过身份验证之后发生,他们可能会弹出一个模式,要求重新身份验证。
  • 提交更改电子邮件的请求,然后要求重设密码
  • 不要误会我的意思,与上面列出的攻击相比,将LocalStorage转储为通用攻击更容易
  • 话虽这么说,最后您花在处理Cookie问题上的资源最好用于强化在用户浏览器上运行的javascript,以确保它们没有运行恶意代码

    但是您不能保护它们不受扩展名的影响,httpOnly cookie至少将确保它们的密钥不会泄漏。了解您的妥协。

  • © www.soinside.com 2019 - 2024. All rights reserved.