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') } }); }); |
您可以在
禁用它是否好?
不,不是。阅读有关CSRF的维基百科页面以了解CSRF是什么,CSRF-Token阻止CSRF。
在laravel中7。
打开文件
对所有路线均禁用
1 2 3 | protected $except = [ '*', ]; |
对某些路线禁用
1 2 3 4 | protected $except = [ 'mobile/*', 'news/articles', ]; |
很长时间以来,我一直在寻找如何完全禁用CSRF的方法,有很多相同的示例,但它们并没有帮助
CSRF令牌可保护您的应用程序及其用户免受跨站点请求伪造的侵害。有关更多信息,请在这里阅读:
https://zh.wikipedia.org/wiki/跨站点_请求_伪造
该令牌已通过Laravel中的中间件进行了验证。如果查看文件
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 = [ // ]; } |
如果要完全禁用它,可以在
我不建议您尽可能禁用它。
(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, |