1

本文建议我们应该在每个请求上更改我们的 CSRF 令牌以防止 BREACH 攻击。即,如果我们使用 gzip/brotli 和每会话 CSRF 令牌和 SSL,我们的令牌只有 1000 个请求就容易受到攻击。

假设这是真的,如何在不中断后退/前进和多个选项卡的情况下在每个请求上重新生成 CSRF 令牌?

显而易见的解决方案是在我们的会话中存储一组有效的 CSRF 令牌,而不仅仅是最近的一个,也许将其限制在 100 个左右。

但是如果我们使用 JWT 或其他东西呢?我们可以只在其中存储用户 ID,然后验证令牌没有过期并且属于当前用户,我们根本不需要将它存储在服务器上。唯一的问题是我们无法在用户注销时撤销 CSRF-JWT,这需要一个短暂的过期时间,但我们不希望它太短或者它在用户有机会提交之前就过期了形式。

解决这个问题的最佳方法是什么?

4

1 回答 1

1

您可以使用 JWT 并将其作为不记名令牌发送到标头中,并将其存储在本地存储中。不要在 cookie 中发送它。在每个请求上发送它并在每个请求上检查它的有效性。您可以为用户提供一个刷新令牌,您可以在他们注销时撤销该令牌。刷新令牌将生成访问 JWT,每次调用都会在很短的时间后过期。

您可以使用 JWT 进行访问控制和所有授权需求。

于 2017-07-11T07:22:50.393 回答