将此添加到 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'));
哪种方法更好,为什么?
最佳答案
两者会产生相同的效果,但 Router::when
方法似乎更优。
如果没有正确的 parent::__construct()
调用,很容易扩展错误的 Controller 或重载 BaseController::__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'));
关于php - 在 Laravel 中设置 CSRF 保护的更好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27586492/