我正在使用Laravel 5.4,我的路由在api中间件
我看到我需要将我的路由转移到Web中间件,但我需要它们在api中间件上,因为我正在创建一个RESTful api,有关如何建议 我可以在api中间件中使用csrf吗?
答案 0 :(得分:7)
CSRF保护可防止使用以前经过身份验证的用户进行攻击(通常使用会话设置状态)https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)。
一个restful API没有状态https://en.wikipedia.org/wiki/Representational_state_transfer,因此没有可以攻击的会话。因此,在一个宁静的API中,CSRF保护是在每个请求上对用户进行身份验证,如果您只是在第一个请求上对用户进行身份验证,并使用会话来执行以下请求,那么您不会使用restfull API并且应该使用Web中间件。 / p>
编辑: 如果您没有任何州,您将如何获得CSRF令牌?
答案 1 :(得分:2)
您可以在任何路由组中使用任何中间件以及自定义中间件。 Laravel让我们变得非常轻松。只需打开Kernel.php
命名空间中的App\Http
文件即可。在第28行找到protected $middlewareGroups
可能并更改下面的代码以允许在api路由中启用Csrf
保护:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
答案 2 :(得分:0)
确保您的网络中间件组包含以下行,并确保使用相同版本的干净laravel安装验证内容。
\App\Http\Middleware\VerifyCsrfToken::class,
并验证路由是否使用Web中间件。您可以通过运行php artisan route:list
来检查它,并记下中间件列。