如何在Laravel中禁用CSRF令牌,为什么我们必须禁用它?

How to disable CSRF Token in Laravel and why we have to disable it?

我想看看如何在Laravel中禁用CSRF令牌以及必须在哪里禁用它。禁用它是否好?


您可以通过编辑在一些路由上禁用CSRF。

1
App\\Http\\Middleware\\VerifyCsrfToken

,并在受保护的

中添加您自己的路线名称

1
$except = [] array.

这似乎不是一个好习惯,因为这样做将删除Laravel的安全性功能。


许多人解释了如何做到这一点,但他们没有解释网址的外观。

编辑app / Http / Middleware / VerifyCsrfToken.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
namespace App\\Http\\Middleware;

use Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * Indicates whether the XSRF-TOKEN cookie should be set on the response.
     *
     * @var bool
     */
    protected $addHttpCookie = true;

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        '/user/my_function'
    ];
}

在$ except array();中我们添加了一个仅包含简单字符串的网址。这通常取决于您的路由设置方式指向控制器。

例如,我的Controller文件夹中有一个UserController.php文件。我有一条类似的路线。在web.php路由文件中。

1
Route::post('/user', 'UserController@my_function')->name('my_function');

或者,如果只是因为您不知道如何使用CSRF而实际上不需要禁用CSRF或添加URL,则提出此问题。您可以使用此方法。

将这些行添加到您的app.blade.php中(如果它用于与ajax相关的调用)。

1
2
3
4
5
6
7
$(function() {
    $.ajaxSetup({
        headers: {
        'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
        }
    });
});


您可以在web中间件组的app/http/Kernel.php中禁用它。

禁用它是否好?

不,不是。阅读有关CSRF的维基百科页面以了解CSRF是什么,CSRF-Token阻止CSRF。


在laravel中7。
打开文件\\App\\Http\\Middleware\\VerifyCsrfToken.php

对所有路线均禁用

1
2
3
protected $except = [
    '*',
];

对某些路线禁用

1
2
3
4
 protected $except = [
    'mobile/*',
    'news/articles',
];

很长时间以来,我一直在寻找如何完全禁用CSRF的方法,有很多相同的示例,但它们并没有帮助


CSRF令牌可保护您的应用程序及其用户免受跨站点请求伪造的侵害。有关更多信息,请在这里阅读:

https://zh.wikipedia.org/wiki/跨站点_请求_伪造

该令牌已通过Laravel中的中间件进行了验证。如果查看文件app/Http/Middleware/VerifyCsrfToken.php,您会看到它为您提供了添加应免于CSRF验证的URL的选项。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

namespace App\\Http\\Middleware;

use Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        //
    ];
}

如果要完全禁用它,可以在app/http/Kernel.php中名为web的Middleware组中找到它。这些是默认情况下通过HTTP请求触发的中间件。

我不建议您尽可能禁用它。


(Temporary fix. Not Recommended)

只需打开kernel.php(app / http)
并禁用

1
App\\Http\\Middleware\\VerifyCsrfToken::class,


您好,只需转到app / Http / Kernel.php文件,只需注释掉第31行

1
// \\App\\Http\\Middleware\\VerifyCsrfToken::class,