【发布时间】:2016-10-14 21:01:34
【问题描述】:
我想看看如何在 Laravel 中禁用 CSRF 令牌,以及我必须在哪里禁用它。禁用它好不好?
【问题讨论】:
标签: laravel
我想看看如何在 Laravel 中禁用 CSRF 令牌,以及我必须在哪里禁用它。禁用它好不好?
【问题讨论】:
标签: laravel
如果您想阻止 csrf 令牌验证,请轻松前往 app/Middleware/VerifyCsrfToken.php 为所有路由禁用它
protected $except = ['*'];
或指定这样的路线
protected $except = ['/api/route/one', 'api/route/two'];
【讨论】:
在 laravel 7 中。
打开文件\App\Http\Middleware\VerifyCsrfToken.php
禁用所有路由
protected $except = [
'*',
];
对某些路线禁用
protected $except = [
'mobile/*',
'news/articles',
];
找了半天如何彻底禁用CSRF,有很多相同的例子,但都无济于事
【讨论】:
许多人解释了如何做到这一点,但他们没有解释 url 应该是什么样子。
编辑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 数组();我们添加一个带有简单字符串的 url。这指向一个控制器,通常取决于你的路由是如何设置的。
例如,我的 Controller 文件夹中有一个 UserController.php 文件。我有一个类似的路线。在 web.php 路由文件中。
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>
【讨论】:
您可以在web 中间件组中的app/http/Kernel.php 中禁用它。
这样禁用好不好?
不不是。阅读Wikipedia page about CSRF了解什么是CSRF,CSRF-Token可以防止CSRF。
【讨论】:
(临时修复。不推荐)
只需打开 kernel.php (app/http) 并禁用
App\Http\Middleware\VerifyCsrfToken::class,
【讨论】:
$except 数组在中间件中设置显式异常。
CSRF 令牌可保护您的应用程序及其用户免受跨站点请求伪造的侵害。有关这方面的更多信息,请在此处阅读:
https://en.wikipedia.org/wiki/Cross-site_request_forgery
令牌通过 Laravel 中的中间件进行验证。如果您查看文件 app/Http/Middleware/VerifyCsrfToken.php,您会看到它为您提供了添加应该免于 CSRF 验证的 URL 的选项。
<?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 请求触发的中间件。
我不建议在可能的情况下禁用它。
【讨论】:
您好,只需转到 app/Http/Kernel.php 文件,只需将第 31 行注释掉
// \App\Http\Middleware\VerifyCsrfToken::class,
【讨论】:
您可以通过编辑在少数路由上禁用 CSRF。
App\Http\Middleware\VerifyCsrfToken
并在 protected 中添加您自己的路线名称
$except = [] array.
这似乎不是一个好的做法,因为这样做我们正在删除 Laravel 的安全功能。
【讨论】:
__construct 方法中,通过对数组中的每个元素使用route 帮助器将路由名称转换为URI 非常容易。