我可以使用 JWT 作为反 CSRF 令牌吗

问题描述

我想看看我是否可以完成防止 CSRF 而不必在服务器上 redis用户会话中存储任何附加信息。在请求表单删除帐户时,我是否可以使用随机字符串 (uuid4) 和密钥对 JWT 令牌进行签名,并具有过期时间并将结果发送给客户端。提交表单后,我将验证 JWT。

像这样:

const tokenToSend = jwt.sign(uuid4(),SECRET,{ expire: 60 })

解决方法

描述 Csrf 攻击的一个简单方法是受害者(登录了易受攻击的网站 A)浏览第三个网站 B,该网站假装是网站 A 的受害者。 因此,为了防止 csrf 攻击,我们必须将请求(我们想要保护的)设置为不可预测,以便攻击者无法事先准备请求。如果您使用 jwt 作为 csrf 令牌,则必须使该 jwt 对于每个请求都是唯一的。