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