Php 如何在控制器上检查令牌(CSRF)?

Php 如何在控制器上检查令牌(CSRF)?,php,laravel,laravel-4,csrf,Php,Laravel,Laravel 4,Csrf,在Laravel上有一些选项,我们允许Laravel创建一个令牌,并在服务器端测试它,以发起CSRF攻击 我在Laravel网站上找到了,但并没有说明如何从控制器或本地真实页面检查是否存在攻击 如何检查控制器上的令牌(CSRF)?假设您使用laravel 4.x: 您不需要在控制器中检查此项。在参数之前定义,告诉laravel自动检查此项 Route::post('profile', array('before' => 'csrf', function(){ /* CSRF va

在Laravel上有一些选项,我们允许Laravel创建一个令牌,并在服务器端测试它,以发起CSRF攻击

我在Laravel网站上找到了,但并没有说明如何从控制器或本地真实页面检查是否存在攻击


如何检查控制器上的令牌(CSRF)?假设您使用laravel 4.x:

您不需要在控制器中检查此项。在参数之前定义
,告诉laravel自动检查此项

Route::post('profile', array('before' => 'csrf', function(){ 
    /* CSRF validated! */  
}));
如果您想在令牌不正确时执行某些操作,可以在
app/filters.php
中更改过滤器。这个:

Route::filter('csrf', function()
{
    if (Session::token() != Input::get('_token'))
    {
        throw new Illuminate\Session\TokenMismatchException;
    }
});
拉威尔5号的答案 在Laravel 5中,中间件替换过滤器。CSRF也是如此。默认情况下,中间件处于启用状态,并在
App\Http\middleware\VerifyCsrfToken
中处理

可以通过删除
App\Http\Kernel
中的
App\Http\Middleware\VerifyCsrfToken
来禁用它。如果移动到
$routeMiddleware

protected $routeMiddleware = [
    'auth' => 'App\Http\Middleware\Authenticate',
    'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
    'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
    'csrf' => 'App\Http\Middleware\VerifyCsrfToken',
];
。。。可以通过将其添加到路由中有条件地使用它:

Route::post('foo', ['middleware' => 'csrf', 'uses' => 'BarController@foo']);
或在控制器构造函数中:

public function __construct(){
    $this->middleware('csrf');
}

对于这个问题非常重要:你使用的是Laravel5还是4?@lukasgeiter谢谢,我使用的是Laravel4.2,但我会在项目结束时切换到5finished@lukasgeiter有什么不同?答案很好,那么拉威尔4号和5号呢,女巫一号是不同的我的意思是这个答案是给拉雷维尔4号或5号的?这个答案是给拉雷维尔4号的谢谢你的回答和花费你的时间。准确地说,两个答案都是正确的(我想,我不知道我应该接受哪一个)。谢谢你,不用客气。因为您使用的是Laravel 4,所以只需接受另一个答案即可。我只是补充了这个答案,因为你要求区别,这并不是一个简单的评论就能解释的;)