这个JWT实现是否在仍然允许我访问有效负载的情况下防止XSS和CSRF攻击?

这个JWT实现是否在仍然允许我访问有效负载的情况下防止XSS和CSRF攻击?,jwt,Jwt,我正在为我的web应用程序实现JWT身份验证和授权,并且可能需要一些帮助来识别我方法中的漏洞。我见过许多简单地说将访问令牌设置为httpOnly cookie的方法,但是,在我的访问令牌中有一些声明我的前端需要访问。我想出了这个方法来解决这个问题 登录时,用户提供用户名和密码,以交换两项: CSRF令牌 JWT访问令牌的头和签名 JWT访问令牌的有效负载 JWT刷新令牌 在我的方法中,所有这些项目都设置为cookie。JWT刷新令牌以及JWT访问令牌的头和签名都存储在httpOnly安全cook

我正在为我的web应用程序实现JWT身份验证和授权,并且可能需要一些帮助来识别我方法中的漏洞。我见过许多简单地说将访问令牌设置为httpOnly cookie的方法,但是,在我的访问令牌中有一些声明我的前端需要访问。我想出了这个方法来解决这个问题

登录时,用户提供用户名和密码,以交换两项:

  • CSRF令牌
  • JWT访问令牌的头和签名
  • JWT访问令牌的有效负载
  • JWT刷新令牌
  • 在我的方法中,所有这些项目都设置为cookie。JWT刷新令牌以及JWT访问令牌的头和签名都存储在httpOnly安全cookie中。JWT访问令牌的有效负载只是作为一个普通的旧cookie存储,以便我的前端可以访问它(我没有在这个令牌中存储任何个人/不安全的信息)

    例如,如果我的JWT访问令牌是
    header.payload.signature
    ,那么我将访问令牌拆分为
    header.signature
    payload
    。这些值存储在各自的cookie中

    当我提出需要授权的请求时,我的后端会抓取所有JWT访问令牌cookie,将它们放回一起,然后检查签名


    这种方法是否在提供对JWT有效负载的安全访问的同时减轻了XSS和CSRF攻击?

    JWT令牌用于身份验证。它被生成并存储在客户机中,当它过期时,会发出新的令牌

    CSRF可以是基于会话或基于请求的不同类型


    我认为JWT不能取代CSRF,XSS

    JWT令牌用于身份验证。它被生成并存储在客户机中,当它过期时,会发出新的令牌

    CSRF可以是基于会话或基于请求的不同类型


    我不认为JWT可以取代CSRF,XSS,这听起来不可行。基本上,您的代码可以访问的任何内容,攻击者的代码也可以访问。所以,你不想要任何“我的前端可以访问”的东西。在我看来,唯一能提供最佳覆盖率的组合是:

    • HttpOnly+安全+SameSite cookies()
    • 使用CSRF令牌保护POST/PUT/DELETE
    • 防止注入脚本的内容安全策略

    除此之外,越简单越好。试图推出一个聪明的解决方案是坏事的诀窍。

    这听起来好像不管用。基本上,您的代码可以访问的任何内容,攻击者的代码也可以访问。所以,你不想要任何“我的前端可以访问”的东西。在我看来,唯一能提供最佳覆盖率的组合是:

    • HttpOnly+安全+SameSite cookies()
    • 使用CSRF令牌保护POST/PUT/DELETE
    • 防止注入脚本的内容安全策略

    除此之外,越简单越好。试图推出一个聪明的解决方案是坏事的诀窍。

    我明白你想在这里说什么。您希望使用httpOnly选项存储cookie,但随后就失去了访问前面的令牌和解码有效负载的可用性,这就是JWT令牌有用的原因(提供额外的有效负载)。我也面临同样的问题。我认为这是你必须做的权衡。但只要你不储存任何敏感信息,我认为你的方法就足够好了。我理解你想在这里说什么。您希望使用httpOnly选项存储cookie,但随后就失去了访问前面的令牌和解码有效负载的可用性,这就是JWT令牌有用的原因(提供额外的有效负载)。我也面临同样的问题。我认为这是你必须做的权衡。但是,只要你没有存储任何敏感信息,那么我认为你的方法就足够好了。对不起,这个答案与所问的问题无关。对不起,这个答案与所问的问题无关。