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

LAS*_*ASH 1 php csrf laravel laravel-4

Laravel有一些选项允许Laravel创建一个令牌并在服务器端测试它以引发CSRF攻击.

我在Laravel网站上发现了这个,但没有说如何从Controller检查是一个攻击还是来自本地和真实页面.

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

luk*_*ter 9

回答Laravel 5

在Laravel 5中,中间件取代了过滤器.CSRF也是如此.中间件默认启用并在中处理App\Http\Middleware\VerifyCsrfToken.

它可以通过删除禁用App\Http\Middleware\VerifyCsrfTokenApp\Http\Kernel.如果搬到$routeMiddleware......

protected $routeMiddleware = [
    'auth' => 'App\Http\Middleware\Authenticate',
    'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
    'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
    'csrf' => 'App\Http\Middleware\VerifyCsrfToken',
];
Run Code Online (Sandbox Code Playgroud)

...可以通过将其添加到路线来有条件地使用它:

Route::post('foo', ['middleware' => 'csrf', 'uses' => 'BarController@foo']);
Run Code Online (Sandbox Code Playgroud)

或者在控制器构造函数中:

public function __construct(){
    $this->middleware('csrf');
}
Run Code Online (Sandbox Code Playgroud)