在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 防護雖然可以解決某些開發中的問題,但也可能帶來安全隱患。關閉時應謹慎考慮,確保你已經採取了其他安全措施,或者只在開發環境中關閉它。必要時,請備份代碼或選擇其他更安全的方案。