【发布时间】:2018-07-03 04:13:40
【问题描述】:
我正在开发一个分布式高可用性单页应用程序,该应用程序由 docker 节点集群提供服务。有时一个节点会死掉(出于完全正当的原因,所以这不是问题)。然后,所有客户端都会无缝地重新路由到其他节点之一。不幸的是,它们的所有 XSRF 令牌都无效,因为它们存储在客户端的内存中。
因此,问题是,我们如何在基于 *nix 的设置中分配当前 XSRF 令牌的存储?
【问题讨论】:
-
您想用 SPA 中的 XSRF 令牌做什么?!??它被称为 SPA,单页 应用程序。该页面仅包含 SPA 的引导程序,一旦加载,就没有新请求,只有 json 或 xml 对 rest api 的请求。对于这些,您不要使用 cookie,而应该使用 EACH 请求 发送令牌(当然是通过 SSL)。当你以这种方式实现 RESTful 服务时,没有什么可以伪造的。
-
使用短期和长期令牌(分别为访问令牌和刷新令牌),您可以缓解它。如果您出于某种原因必须使用 cookie,也可以通过 http-only cookie See Jeff's post on it 来防止 xss
-
@Tseng,你在哪里看到我的帖子中提到了 cookie?
-
根据您的要求进行简单假设。为什么还要 XSRF?针对WebAPI/Restful Api 的 XSRF 仅在您不为每个请求传递令牌时才有效,这意味着发送 cookie。 XSRF 适用于 MVC 风格。例如,如果您的网站上有一个“订单”,我复制了该 html 代码,将其放在我自己的网站上,但将表单“操作”到您的网站,然后引诱用户访问我的虚假页面,并填写隐藏的表单并在用户单击以将其重定向到您的网站并触发订单时发送。没有 XSRF 令牌,如果您已登录,就会成功
-
因为表单会将用户重定向到您的网站,并在他们登录时发送表单和cookie。因此您需要XSRF,它会在每个请求上发生变化,因此攻击者无法执行此操作。但是当你有一个 SPA 时,你通常会调用一个 Rest-service/rest api 并且不使用 cookie,所以上面的方法不起作用。所以问题是:为什么你认为你需要anti-XSRF-token来做SPA吗?
标签: c# asp.net-core csrf x-xsrf-token