关闭token的3种实现方式
1. 关闭基于Token的CSRF防护
在 Laravel 5.5 版本之前,Laravel 都是采用基于 Token 的 CSRF 防护级别,这可以保证应用的安全性。但是在某些特定情况下,用户可能会希望关闭基于 Token 的 CSRF 防护,以免给开发过程带来不必要的烦恼。这时可以通过修改 Kernel.php 文件来实现:打开 App\Http\Kernel.php 文件,找到 $middlewareGroups 属性中名为 web 的配置数组,在该配置数组的 $middleware 属性中添加如下代码:
protected $middlewareGroups = [
'web' => [
// ...
\App\Http\Middleware\VerifyCsrfToken::class => function ($request, $next) {
return $next($request);
},
],
];
通过将 VerifyCsrfToken::class 中间件定义成一个匿名函数,就可以关闭基于 Token 的 CSRF 防护了。
2. 关闭路由级别的CSRF防护
除了可以在全局关闭基于 Token 的 CSRF 防护之外,还可以在单个路由上关闭 CSRF 防护,Laravel 提供了一个 csrf_exempt 方法,可以在对应单个路由上进行设置。使用该方法时,在路由定义中调用 csrf_exempt 方法即可,例如:
Route::post('/api/posts', [
'middleware' => 'auth.basic',
'uses' => 'PostController@store'
])->csrf_exempt();
这样就可以在单个路由上关闭 CSRF 防护了。
3. 关闭CSRF防护组件
最后一种关闭 CSRF 防护的方法是直接关闭 CSRF 防护组件,这种方法需要修改 VerifyCsrfToken.php 文件。位于 App\Http\Middleware 目录下的 VerifyCsrfToken.php 文件是 Laravel 提供的默认 CSRF 防护中间件。如果要关闭 CSRF 防护,只需要在此文件中修改它的 handle 方法,并将其中的代码全部注释掉即可,例如:
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
];
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// return parent::handle($request, $next);
return $next($request);
}
}
通过将 parent::handle($request, $next) 注释掉,就可以关闭 CSRF 防护组件了。
总之,关闭 CSRF 防护需要谨慎,并应该根据实际情况进行判断。如果必须关闭 CSRF 防护,建议对代码进行备份或使用其他安全性相对较高的方案代替。