Session 反CSRF令牌是否存储在客户端、服务器端或两者上?

Session 反CSRF令牌是否存储在客户端、服务器端或两者上?,session,cookies,jwt,xss,csrf,Session,Cookies,Jwt,Xss,Csrf,我正在创建一个带有Node.Js后端的React Js网站。我一直在试图找出一个用户身份验证实现来防止CSRF攻击,但是我真的很困惑在哪里存储反CSRF令牌 我对安全实现的思考过程如下 用户提交使用凭据登录的请求 凭据经过身份验证 服务器创建会话 服务器创建JWT用作反CSRF令牌 服务器将JWT(反CSRF令牌)存储在会话存储中 服务器向客户端发送响应。 响应具有将会话ID存储在客户端HttpOnly cookie中的头 响应负载包括JWT(反CSRF令牌) 客户端收到响应 客户端上只存储

我正在创建一个带有Node.Js后端的React Js网站。我一直在试图找出一个用户身份验证实现来防止CSRF攻击,但是我真的很困惑在哪里存储反CSRF令牌

我对安全实现的思考过程如下

  • 用户提交使用凭据登录的请求
  • 凭据经过身份验证
  • 服务器创建会话
  • 服务器创建JWT用作反CSRF令牌
  • 服务器将JWT(反CSRF令牌)存储在会话存储中
  • 服务器向客户端发送响应。
    • 响应具有将会话ID存储在客户端HttpOnly cookie中的头
    • 响应负载包括JWT(反CSRF令牌)
  • 客户端收到响应
  • 客户端上只存储HttpCookie会话ID
  • 客户端将JWT(反CSRF令牌)存储在本地存储中
  • 我认为当用户需要请求信息时,客户端可以通过头或负载发送JWT(Anti-CSRF token),会话ID将自动发送,因为它是一个cookie。然后,服务器可以检查会话存储中是否存在JWT(反CSRF令牌)

    我知道JWT(反CSRF令牌)在某个时候需要刷新

    我的困惑是由于在客户端存储JWT(反CSRF令牌)。我一直在读,它应该只存储在服务器上。但是,如果它只存储在服务器上,它似乎什么都没有做

    我考虑同时使用cookie和localStorage,因为如果对服务器的请求同时需要HttpOnly cookie和localStorage中的某些东西来发送回“授权”响应,则攻击者需要成功执行会话并成功实施XSS攻击才能获得反CSRF令牌

    我最近才开始学习CSRF和XSS,所以我可能完全错了,在我的实现中可能有一个巨大的缺陷,我没有发现。但我的主要问题是。。。反CSRF令牌不需要存储在客户端和服务器上吗?

    它们也称为“CSRF令牌”。当客户请求表单(例如银行登录页面)时,服务器生成令牌并将其传递给客户,当客户填写表单时,客户将CSRF令牌与完成的表单一起传递。服务器验证令牌值,如果匹配,则满足请求。CSRF令牌以同步器令牌模式存储在服务器端