考虑这种情况:
应用程序具有受Laravel的CSRF过滤器保护的登录路由:
Route::group(array('before' => 'csrf'), function() {
Route::post('/doLogin', array('as' => 'doLogin', 'uses' => 'MainController@doLogin'));
});
该应用程序位于负载均衡器后面,每个请求随机发送到 server01
或 server02
. Laravel配置为在数据库中持久保存会话,数据库由 server01
和 server02
共享 . 要遵循的标准路径是:用户访问 /
,将其凭据输入登录表单,然后将这些凭据提交给 /doLogin
,后者检查令牌,处理凭据,并在发生错误时将用户返回 /
,或者成功时返回 /home
.
我的问题是:由于无法保证访问 server01
上的 /
的用户将在 server01
上发布 /doLogin
,Laravel的内置CSRF令牌是否有效?或者由于令牌存储在 Session
中,无论哪个服务器最终由LB分配,它都能正常工作吗?
1 回答
如果在这些服务器之间共享会话,CSRF将无论其命中哪台服务器都能正常工作 .
数据库,Cookie和memcached / redis会话驱动程序都很好 .
文件会话驱动程序不应该通常工作 .
来自客户端的CSRF令牌与会话中的CSRF令牌进行比较 .