Yii2在多台服务器上进行CSRF验证


Yii2 CSRF validation on multiple servers

我有一个部署在三台服务器上的应用程序。使用负载平衡器的请求被多路传输到服务器。问题是一台服务器生成CSRF令牌,该令牌在另一台服务器上进行验证,但验证失败。

CSRF是否应该像会话一样保存在DB中,以便在每个服务器上保持相同?

有人能解决这个问题吗?

感谢

是的,想法是将其存储在服务器的某个公共位置。

在我们的案例中,我们所有的服务器都使用一个memcache服务器进行会话存储,并且我们没有遇到任何关于CSRF令牌的问题。

此外,如果您正在使用PageCache,如果CSRF令牌也在缓存中,则可能会出现问题。为了避免缓存CSRF令牌,您可以在布局中使用renderDynamic函数,如下所示:

<?= $this->renderDynamic(' return 'yii'helpers'Html::csrfMetaTags(); '); ?>