所有POST请求上的Laravel 4 CSRF

Dex*_*xty 14 php csrf laravel

最近一直在调查laravel,并试图找出他们拥有的CSRF保护.但是,我无法让它发挥作用.有什么方法可以使用CSRF过滤器验证提交的所有帖子请求吗?我已经看到laravel系统有:

    App::before(function($request)
{
    //
});
Run Code Online (Sandbox Code Playgroud)

如何在CSRF过滤器中使用它?一直在尝试一些不同的东西

App::before(function($request)
{
    Route::filter('csrf','post');
});
Run Code Online (Sandbox Code Playgroud)

但我可能会离开这里..这将如何运作?或者甚至可以这样做?

小智 30

这是最好和最简单的解决方案:

Route::when('*', 'csrf', array('post'));
Run Code Online (Sandbox Code Playgroud)

无需分组路线或混乱构造函数.

  • 这就在这里真棒! (3认同)

Ble*_*ing 23

您可以使用路线组.这会将指定的选项应用于组中定义的任何路由:

Route::group(array('before' => 'csrf'), function()
{
    Route::post('/', function()
    {
    // Has CSRF Filter
    });

    Route::post('user/profile', function()
    {
    // Has CSRF Filter
    });

    Route::post(....);
});
Run Code Online (Sandbox Code Playgroud)

对于某些路线,或者如果分组不是您想要的,您还可以使用模式过滤器:

//all routes beginning with admin, sent via a post http request will use the csrf filter
Route::when('admin/*', 'csrf', array('post'));
Run Code Online (Sandbox Code Playgroud)

注意:此代码将包含在routes.php文件中


ux.*_*eer 11

在我的BaseController中我有这个:

public function __construct()
{
    $this->beforeFilter('csrf', array('on' => array('post', 'delete', 'put')));
    $this->beforeFilter('ajax', array('on' => array('delete', 'put')));
}
Run Code Online (Sandbox Code Playgroud)

有这样的App::before过滤器是一个有趣的方法,但我不知道哪个更好?