Laravel的CSRF令牌和负载均衡

10
考虑以下情况:
一个应用程序有一个登录路由,该路由受 Laravel 的 CSRF 过滤器保护:
Route::group(array('before' => 'csrf'), function() {

    Route::post('/doLogin', array('as' => 'doLogin', 'uses' => 'MainController@doLogin'));

});

应用程序位于负载均衡器后面,每个请求随机分配到server01server02。Laravel被配置为在数据库中保留会话,该数据库由server01server02共享。遵循的标准路径是:用户访问/,将其凭据输入登录表单,并将这些凭据提交给/doLogin,该路径检查令牌,处理凭据并返回用户到错误的/或成功的/home
我的问题是:既然用户在server01上访问/,不一定会在server01上发布/doLogin,那么Laravel内置的CSRF令牌是否有效?或者由于令牌存储在Session中,无论LB分配给哪个服务器,它都能正常工作?

我在多台负载均衡服务器之间使用Redis来处理会话,但无论命中哪个服务器,CSRF都能完美工作... 我已经通过在请求之间关闭服务器进行了特别测试。 - Mark Baker
2个回答

5

如果会话在这些服务器之间共享,CSRF 就可以在任何服务器上运行。

数据库、Cookie 和 memcached/redis 会话驱动程序都很好。

通常情况下,文件会话驱动程序不起作用。

客户端的 CSRF 令牌将与会话中的令牌进行比较。


0
你应该使用cookie或数据库驱动程序来处理会话。要了解更多信息,请阅读 Laravel会话文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接