我们的应用程序是具有并发 Ajax 请求的 Ajax 重度应用程序。为每个请求生成唯一令牌或在某个时间间隔后过期并创建新令牌对于多个并发 Ajax 请求可能会变得很棘手。
我的问题来自这里建议的方法-
确实,如果您通过 HTTPS 执行此操作,则每次加载整个页面时生成一个就足够了,您应该这样做。
如果我们启用 HTTPS,每个会话生成一个 CSRF 令牌并将该令牌用于会话中的所有请求就足够了吗?
我们的应用程序是具有并发 Ajax 请求的 Ajax 重度应用程序。为每个请求生成唯一令牌或在某个时间间隔后过期并创建新令牌对于多个并发 Ajax 请求可能会变得很棘手。
我的问题来自这里建议的方法-
确实,如果您通过 HTTPS 执行此操作,则每次加载整个页面时生成一个就足够了,您应该这样做。
如果我们启用 HTTPS,每个会话生成一个 CSRF 令牌并将该令牌用于会话中的所有请求就足够了吗?
为了防止 CSRF,您需要在请求的显式部分(GET 或 POST)中有一些不可猜测的内容。将其放入 POST 部分是首选,因为它更难泄漏,并且您通常只保护触发操作的请求,这应该是 POST。
每个会话的随机值是不可猜测的,应该可以完成这项工作。ASP.net 中内置的标准反 CSRF 令牌机制就是这样工作的。
HTTPS 可以防止在线路上泄露令牌,还可以防止重放攻击。因此,一次性令牌似乎没有必要。
每个会话使用一个 CSRF 令牌可以为 CSRF 提供足够的保护,但可以通过为每个表单使用不同的 CSRF 令牌来获得更好的安全性。
在其他一些漏洞的情况下,攻击者可能会窃取或滥用 CSRF 令牌。在这种情况下,最好尽可能限制 CSRF 令牌。此 Ruby on Rails PR将 CSRF 令牌更改为仅对特定的表单操作和方法有效,因此被盗的 CSRF 令牌不能用于任何其他目的。这在GitHub 工程博客中有更多描述。
这是一种纵深防御措施。如果其他一些漏洞可以窃取 CSRF 令牌,最好限制 CSRF 令牌的有效性。