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

mznpcxlj  于 2023-05-19  发布在  其他
关注(0)|答案(8)|浏览(151)

我想看看如何在Laravel中禁用CSRF令牌,以及在哪里禁用它。这是好的禁用它或不?

du7egjpx

du7egjpx1#

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

App\Http\Middleware\VerifyCsrfToken

并在protected中添加自己的路由名称

$except = [] array.

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

2lpgd968

2lpgd9682#

在laravel 9.打开文件\App\Http\Middleware\VerifyCsrfToken.php
禁用所有路由

protected $except = [
    '*',
];

禁用某些路由

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

我搜索了很长一段时间,如何禁用CSRF完全,有许多相同的例子,但他们没有帮助

elcex8rz

elcex8rz3#

许多人解释了如何做到这一点,但他们没有解释url应该是什么样子。
edit app/Http/Middleware/VerifyCsrfToken.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'
    ];
}

在$except array()中;我们只添加一个简单字符串的URL。这指向一个控制器通常取决于你的路线是如何设置的。
例如,我在Controller文件夹中有一个UserController.php文件。我有一条路像。在web.php routes文件中。

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

另外,如果你来这个问题只是因为你不知道如何使用CSRF,你实际上不需要禁用它,或使URL除了。你可以使用这个方法。
如果app.blade.php用于 AJAX 相关的调用,请将这些行添加到app.blade.php。

<script>
$(function() {
    $.ajaxSetup({
        headers: {
        'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
        }
    });
});
</script>
f1tvaqid

f1tvaqid4#

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

  • 这是好禁用它或不?*

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

6vl6ewon

6vl6ewon5#

CSRF令牌保护您的应用程序及其用户免受跨站点请求伪造的影响。有关更多信息,请阅读here
令牌通过Laravel中的中间件进行验证。如果你看一下app/Http/Middleware/VerifyCsrfToken.php文件,你会发现它为你提供了添加URL的选项,这些URL应该免于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 = [
        //
    ];
}

如果要完全禁用它,可以将其从app/Http/Kernel.php中名为web的中间件组中删除。这些是默认情况下通过HTTP请求触发的中间件。
我不建议在可能的情况下禁用它。

zz2j4svz

zz2j4svz6#

你好,只是去app/Http/Kernel.php文件只是注解了第31行

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

pw9qyyiw7#

如果您想阻止csrf令牌验证,请轻松前往app/Middleware/VerifyCsrfToken.php,对所有路由protected $except = ['*'];禁用它,或者像下面这样指定路由

protected $except = ['/api/route/one', 'api/route/two'];
dm7nw8vv

dm7nw8vv8#

临时修复。不推荐
只需打开kernel.php(app/http)并禁用

App\Http\Middleware\VerifyCsrfToken::class,

相关问题