在 Laravel 5.5 之前,Laravel 默认启用了基于 Token 的 CSRF 防护,以确保应用程序的安全性。然而,在某些开发场景中,可能需要关闭这种防护,避免额外的复杂性。你可以通过修改 Kernel.php 文件来实现这一目标:
首先,打开 App\Http\Kernel.php 文件,找到 $middlewareGroups 属性中的 web 配置数组,在其中添加如下代码:
protected $middlewareGroups = [
'web' => [
// ...
App\Http\Middleware\VerifyCsrfToken::class => function ($request, $next) {
return $next($request);
},
],
];
通过将 VerifyCsrfToken::class 中间件定义为一个匿名函数,你就成功关闭了基于 Token 的 CSRF 防护。
如果你只想在某些特定的路由上禁用 CSRF 防护,Laravel 提供了 csrf_exempt 方法,允许你在路由定义中单独关闭 CSRF 防护。例如:
Route::post('/api/posts', [
'middleware' => 'auth.basic',
'uses' => 'PostController@store',
])->csrf_exempt();
使用此方法,你可以在指定的路由上禁用 CSRF 防护。
最后,你还可以通过修改 VerifyCsrfToken.php 文件来关闭整个 CSRF 防护组件。文件位于 App\Http\Middleware 目录中,打开该文件并注释掉其 handle 方法中的代码即可:
class VerifyCsrfToken extends Middleware
{
protected $except = [];
public function handle($request, Closure $next)
{
// return parent::handle($request, $next);
return $next($request);
}
}
通过注释掉 parent::handle($request, $next),就可以关闭整个 CSRF 防护组件。
关闭 CSRF 防护虽然可以解决某些开发中的问题,但也可能带来安全隐患。关闭时应谨慎考虑,确保你已经采取了其他安全措施,或者只在开发环境中关闭它。必要时,请备份代码或选择其他更安全的方案。