laravel中CSRF令牌不匹配的可能原因

时间:2013-11-15 09:00:28

标签: php security laravel laravel-4 csrf

在我的网络应用程序alpha测试中,有两个恶魔抱怨csrf令牌不匹配问题,

有没有办法检查csrf令牌是否正常工作而不进入laravel的测试功能?

我正在使用

Route::post('signup', array('before' => 'guest|csrf','uses' => 'AuthController@postSignup'));

这在路线

<input type="hidden" name="_token" value="{{ csrf_token() }}" />

在表格内部,我做错了什么?

另外我想知道,用户手动输入的可能原因是什么与csrf令牌不匹配?

1 个答案:

答案 0 :(得分:1)

如果您使用Form::open(),Laravel 4会自动为您添加令牌。你的表单中有两个令牌吗?

令牌是存储在当前Session中的随机字符串,因此如果您遇到问题,您应该查看您的会话并回答一些问题(对您自己):

1)这是什么时候发生的?这有多频繁? 在某些时候会话将会过期,如果你长时间保持一个表格,它将会过期。

2)你正在使用哪个sesion驱动程序? 你已经改变了驱动程序吗? (文件,cookie,数据库......)

3)你能重现吗?

4)你能跟踪Session :: getId(),看看当你收到错误时它是否也会改变?将其添加到您的代码中,并查看日志文件,了解发生错误时会发生什么:

Log::info('session.id='.Session::getId());
Log::info('session.token='.Session::token());