我在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令牌,以防止跨站点请求伪造。
example.com
重定向到呈现server.com/login
的服务器以创建httpOnly
cookie,然后将其重定向回SPA中的登录状态。 据我所知,在Safari中启用Prevent cross-site tracking
时,其目的是在允许发送Cookie之前让用户与其他域进行交互。通过重定向它们,该意图已经创建,并且设置cookie应当没有问题,并且可以由example.com
发送它。
2查看与StorageAccess相关的讨论,因为此处的想法是与依赖来自不同域的cookie的第三方身份验证解决方案一起使用。 Safari ITP使得这些功能变得更难使用,因此其想法是与供应商合作,以寻求比LocalStorage
更好的解决方案。
3将密钥存储在LocalStorage
中,并审查所有来自您的运行中的javascript代码,并确保在处理用户创建的值时遵循最佳做法。
LocalStorage
使您可能遭受XSS攻击,但Cookies使您遭受CSRF攻击。您必须减轻这些负担,但并不太难,但是请记住,在使用Cookie时已引入了这些向量。
发生的任何XSS都结束了,即使使用httpOnly cookie。忘记您的身份验证密钥,运行攻击者代码可能会造成更大的破坏。
使用用户名/密码的键盘记录器
LocalStorage
转储为通用攻击更容易但是您不能保护它们不受扩展名的影响,httpOnly
cookie至少将确保它们的密钥不会泄漏。了解您的妥协。