Caching 避免使用CSRF令牌

Caching 避免使用CSRF令牌,caching,csrf,varnish,csrf-protection,Caching,Csrf,Varnish,Csrf Protection,我有一个场景,我已经有了CSRF令牌,但我必须删除。在电子商务中,产品页面由Varnish缓存,因此如果用户直接在这里登录,他将没有会话ID来验证令牌。在这个页面中,我有一个“添加到购物车”按钮,其中包含CSRF令牌,但它当然是用错误的令牌缓存的 我的问题是:有没有另一种方法可以在不依赖令牌隐藏的输入的情况下实现CSRF保护?放置按钮的页面必须被缓存,因此在这种情况下,令牌是不好的 谢谢。您可以将cookie用于CSRF,cookie将在表单页上设置,并在下一页上检查。它可能需要一些调整,但会绕

我有一个场景,我已经有了CSRF令牌,但我必须删除。在电子商务中,产品页面由Varnish缓存,因此如果用户直接在这里登录,他将没有会话ID来验证令牌。在这个页面中,我有一个“添加到购物车”按钮,其中包含CSRF令牌,但它当然是用错误的令牌缓存的

我的问题是:有没有另一种方法可以在不依赖令牌隐藏的输入的情况下实现CSRF保护?放置按钮的页面必须被缓存,因此在这种情况下,令牌是不好的


谢谢。

您可以将cookie用于CSRF,cookie将在表单页上设置,并在下一页上检查。它可能需要一些调整,但会绕过缓存


不要忘了配置Varnish,使其不会丢弃该cookie。

您可以将cookie用于CSRF,cookie在表单页面上设置,并在下一个页面上检查。它可能需要一些调整,但会绕过缓存


不要忘了配置Varnish,使其不会丢弃该cookie。

您可以将cookie用于CSRF,cookie在表单页面上设置,并在下一个页面上检查。它可能需要一些调整,但会绕过缓存


不要忘了配置Varnish,使其不会丢弃该cookie。

您可以将cookie用于CSRF,cookie在表单页面上设置,并在下一个页面上检查。它可能需要一些调整,但会绕过缓存


别忘了配置Varnish,使其不会掉落cookie。

OWASP CSRF预防备忘单中介绍了一种替代方法,标题为

它使用表单提交会话ID,其中javascript读取此cookie值并将其作为隐藏的输入元素注入表单。要使其正常工作,您的会话cookie不得标记为
HTTPOnly
,这是一种不好的做法。因此,当您尝试在CSRF上添加一些会话cookie时,会丢失一些会话cookie安全性

作为此方法的改进,您可以使用登录名创建另一个存储CSRF令牌值的cookie,并使用此cookie而不是
sessionid
cookie。现在,您可以将sessionid cookie标记为
HTTPOnly
。(不将csrf cookie标记为httponly也是一种不好的做法,但不像以前那样重要)


(出于性能原因,我假设在每个页面上通过AJAX调用检索csrf令牌不是一个选项)

OWASP csrf预防备忘单中描述了一个替代方案,标题为

它使用表单提交会话ID,其中javascript读取此cookie值并将其作为隐藏的输入元素注入表单。要使其正常工作,您的会话cookie不得标记为
HTTPOnly
,这是一种不好的做法。因此,当您尝试在CSRF上添加一些会话cookie时,会丢失一些会话cookie安全性

作为此方法的改进,您可以使用登录名创建另一个存储CSRF令牌值的cookie,并使用此cookie而不是
sessionid
cookie。现在,您可以将sessionid cookie标记为
HTTPOnly
。(不将csrf cookie标记为httponly也是一种不好的做法,但不像以前那样重要)


(出于性能原因,我假设在每个页面上通过AJAX调用检索csrf令牌不是一个选项)

OWASP csrf预防备忘单中描述了一个替代方案,标题为

它使用表单提交会话ID,其中javascript读取此cookie值并将其作为隐藏的输入元素注入表单。要使其正常工作,您的会话cookie不得标记为
HTTPOnly
,这是一种不好的做法。因此,当您尝试在CSRF上添加一些会话cookie时,会丢失一些会话cookie安全性

作为此方法的改进,您可以使用登录名创建另一个存储CSRF令牌值的cookie,并使用此cookie而不是
sessionid
cookie。现在,您可以将sessionid cookie标记为
HTTPOnly
。(不将csrf cookie标记为httponly也是一种不好的做法,但不像以前那样重要)


(出于性能原因,我假设在每个页面上通过AJAX调用检索csrf令牌不是一个选项)

OWASP csrf预防备忘单中描述了一个替代方案,标题为

它使用表单提交会话ID,其中javascript读取此cookie值并将其作为隐藏的输入元素注入表单。要使其正常工作,您的会话cookie不得标记为
HTTPOnly
,这是一种不好的做法。因此,当您尝试在CSRF上添加一些会话cookie时,会丢失一些会话cookie安全性

作为此方法的改进,您可以使用登录名创建另一个存储CSRF令牌值的cookie,并使用此cookie而不是
sessionid
cookie。现在,您可以将sessionid cookie标记为
HTTPOnly
。(不将csrf cookie标记为httponly也是一种不好的做法,但不像以前那样重要)


(出于性能原因,我假设在每个页面上通过AJAX调用检索csrf令牌不是一个选项)

要使csrf令牌有效,您需要能够在cookie机制之外提交它。为了检索CSRF令牌,您可以让页面执行到站点的AJAX POST

e、 g.
https://www.example.com/GetCSRFToken

答复:

{ "token": "abcdefg" }

然后,您可以将此令牌与您的表单一起提交。由于这是一个单独的请求,因此响应将不会是缓存页面的一部分。此方法的唯一缺点是必须启用JavaScript才能检索令牌。不过,您也可以处理这种情况,如果由于禁用JavaScript而在没有标记的情况下发布表单,您可以在将实际项目添加到购物车之前添加确认步骤。确认页面将被设置为不缓存,这样每个用户将始终获得其会话的令牌。

要使CSRF令牌生效,您需要能够在cookie机制之外提交它。为了检索CSRF令牌,您可以让页面执行到站点的AJAX POST

e、 g.
https://www.example.com/Get