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