Какой лучший способ настроить защиту CSRF в Laravel?

Добавление этого в 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']]);
}

или добавив это в route.php:

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

Какой способ лучше и почему?

4

Решение

Оба будут иметь тот же эффект, но 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'));
6

Другие решения

Других решений пока нет …