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

Posted

技术标签:

【中文标题】在 Laravel 中设置 CSRF 保护的更好方法是啥?【英文标题】:Which is the better way to setup CSRF protection in Laravel?在 Laravel 中设置 CSRF 保护的更好方法是什么? 【发布时间】:2015-02-19 14:18:37 【问题描述】:

将此添加到 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】:

两者的效果相同,但Router::when 方法似乎更受欢迎。

如果没有正确的parent::__construct() 调用,很容易扩展错误的控制器或重载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'));

【讨论】:

请注意,这可能适用于身份验证过滤器。

以上是关于在 Laravel 中设置 CSRF 保护的更好方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel csrf 令牌在 ajax 上第二次不匹配

Laravel CSRF 保护

如何在Laravel刀片模板中设置变量

Laravel CSRF 保护

如何在 Postman 中设置 CSRF 令牌

laravel csrf保护