哪个是在Laravel中设置CSRF保护的更好方法?

时间:2014-12-21 03:30:36

标签: php laravel csrf

将此添加到BaseController.php:

public function __construct() {
    // Run the 'csrf' filter on all post, put, patch and delete requests.
    $this->beforeFilter('csrf', ['on' => ['post', 'put', 'patch', 'delete']]);
}

或将其添加到routes.php:

Route::when('*', 'csrf', array('post', 'put', 'patch', 'delete'));

哪种方式更好,为什么?

1 个答案:

答案 0 :(得分:6)

两者都会产生相同的效果,但Router::when方法似乎是优先的。

在没有正确BaseController::__construct()调用的情况下,扩展错误的控制器或过载parent::__construct()非常容易。在这两种情况下都不会发生错误。如果这种情况偶然发生,你会有一个无声的安全漏洞:

class FooController extends App\BaseController
{
    public function __construct()
    {
         $this->initializeSomething() 
         // somebody forgot to call parent::__construct()
    }

    public function action()
    {
         // no CSRF protection here!
    }
}

使用路由器似乎不易出错,以后无法轻易覆盖过滤器。

Route::when('*', 'csrf', array('post', 'put', 'patch', 'delete'));