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

时间:2016-06-14 08:27:42

标签: laravel

我想知道如何在Laravel中禁用CSRF令牌以及我必须禁用它的位置。禁用它是否很好?

7 个答案:

答案 0 :(得分:29)

您可以通过编辑在少数路线上禁用CSRF。

App\Http\Middleware\VerifyCsrfToken 

并在受保护的

中添加您自己的路线名称
$except = [] array.

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

答案 1 :(得分:4)

您可以在app/http/Kernel.php - 中间件组中的web中将其停用。

Is this good to disable it or not?

不,不是。阅读Wikipedia page about CSRF以了解CSRF是什么,CSRF-Token阻止CSRF。

答案 2 :(得分:4)

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

https://en.wikipedia.org/wiki/Cross-site_request_forgery

令牌通过Laravel中的中间件验证。如果您查看文件app/Http/Middleware/VerifyCsrfToken.php,您会看到它可以选择添加应免除CSRF验证的网址。

<?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 = [
        //
    ];
}

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

我不建议尽可能禁用它。

答案 3 :(得分:4)

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

对所有路线均禁用

protected $except = [
    '*',
];

对某些路线禁用

 protected $except = [
    'mobile/*',
    'news/articles',
];

我很长一段时间都在寻找如何完全禁用CSRF的方法,有很多相同的示例,但它们无济于事

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

编辑应用程序/Http/Middleware/VerifyCsrfToken.php     

uname=loginuser.username
print(loginuser.get_full_name)

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

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

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'
    ];
}

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

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

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

答案 6 :(得分:-1)

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

App\Http\Middleware\VerifyCsrfToken::class,