Laravel在api中间件上启用csrf保护

时间:2017-05-16 16:05:32

标签: php laravel csrf

我正在使用Laravel 5.4,我的路由在api中间件

我看到我需要将我的路由转移到Web中间件,但我需要它们在api中间件上,因为我正在创建一个RESTful api,有关如何建议 我可以在api中间件中使用csrf吗?

3 个答案:

答案 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来检查它,并记下中间件列。