首页 > php框架 > Laravel > 正文

如何在Laravel中使用中间件进行跨站请求伪造(CSRF)保护

PHPz
发布: 2023-11-02 11:16:47
原创
676人浏览过

如何在laravel中使用中间件进行跨站请求伪造(csrf)保护

在现代Web应用中,跨站请求伪造(CSRF)攻击已成为一种常见的攻击方式,Laravel是一款流行的PHP框架,它内置了CSRF保护机制,使用中间件可以非常方便地为应用添加CSRF保护。

本文将介绍如何在Laravel中使用中间件进行CSRF保护,并提供具体的代码示例。

什么是跨站请求伪造(CSRF)攻击?

跨站请求伪造攻击,英文名为Cross-Site Request Forgery,简称CSRF,是一种通过伪造用户身份发起恶意请求的攻击方式。

攻击者通常通过欺骗用户点击带有恶意链接的页面或者在受害者登录过的网站中插入恶意脚本的方式来实施CSRF攻击。当受害者在登录状态下,攻击者发起一系列恶意请求(比如修改密码、发表留言等),这些请求看起来对于受害者来说是合法的,但实际上这些请求是由攻击者发起的,这样就会对受害者造成一定的危害。

如何在Laravel中使用中间件进行CSRF保护?

Laravel为我们提供了非常方便的机制来保护应用免受CSRF攻击。Laravel框架中内置了CSRF保护机制,可以通过中间件方式来实现。

在Laravel中,我们使用CSRF中间件来检查POST、PUT、DELETE请求上的CSRF令牌是否有效。 默认情况下,Laravel会在应用中添加VerifyCsrfToken中间件,并自动检查这些请求的CSRF令牌是否有效。

如果CSRF令牌无效,Laravel将抛出一个TokenMismatchException异常,并提供一个默认的错误视图。我们也可以根据自己的需求自定义错误处理方式。

配置CSRF令牌

Laravel会在每个用户会话中为应用生成一个CSRF令牌,我们可以在应用config/csrf.php的配置文件中调整CSRF令牌的配置。该配置文件允许您配置CSRF COOKIE和CSRF令牌在请求中的名称。

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | CSRF Cookie Name
    |--------------------------------------------------------------------------
    |
    | The name of the cookie used to store the CSRF token.
    |
    */

    'cookie' => 'XSRF-TOKEN',

    /*
    |--------------------------------------------------------------------------
    | CSRF Header Name
    |--------------------------------------------------------------------------
    |
    | The name of the CSRF header used to store the CSRF token.
    |
    */

    'header' => 'X-XSRF-TOKEN',

    /*
    |--------------------------------------------------------------------------
    | CSRF Token Expiration
    |--------------------------------------------------------------------------
    |
    | The number of minutes that the CSRF token should be considered valid.
    |
    */

    'expire' => 60,

];
登录后复制

使用CSRF中间件

Laravel中的VerifyCsrfToken中间件将检查在路由中定义的任何POST、PUT或DELETE请求上的CSRF令牌是否有效。默认情况下,应用的routes/web.php文件除了web中间件外,还会使用VerifyCsrfToken中间件。

可以在中间件组中添加CSRF中间件,以便在应用中的其他路由中使用。为了使用中间件保护路由,我们可以使用middleware方法将其添加到路由定义中,如下所示:

Route::middleware(['web', 'csrf'])->group(function () {
    //
});
登录后复制

自定义CSRF错误处理

默认情况下,如果使用VerifyCsrfToken中间件检测到CSRF令牌不正确,Laravel将抛出一个TokenMismatchException异常,并提供一个默认的错误视图。

我们可以在app/Exceptions/Handler.php文件中尝试捕获CSRF异常并指定我们自己的错误处理方式。下面是一个自定义CSRF异常处理程序的示例:

<?php

namespace AppExceptions;

use Exception;
use IlluminateFoundationExceptionsHandler as ExceptionHandler;
use IlluminateSessionTokenMismatchException;

class Handler extends ExceptionHandler
{
    /**
     * A list of the exception types that should be reported.
     *
     * @var array
     */
    protected $dontReport = [
        TokenMismatchException::class,
    ];

    /**
     * Report or log an exception.
     *
     * @param  Exception  $exception
     * @return void
     *
     * @throws Exception
     */
    public function report(Exception $exception)
    {
        parent::report($exception);
    }

    /**
     * Render an exception into an HTTP response.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  Exception  $exception
     * @return IlluminateHttpResponse
     *
     * @throws Exception
     */
    public function render($request, Exception $exception)
    {
        if ($exception instanceof TokenMismatchException) {
            // 处理CSRF异常
            return redirect()
                ->back()
                ->withInput($request->input())
                ->with('error', 'CSRF Token Mismatch');
        }

        return parent::render($request, $exception);
    }

}
登录后复制

在上面的代码中,我们捕获了TokenMismatchException异常,并使用with方法将错误消息保存到error闪存数据中。稍后,我们可以在视图中使用with方法访问这个闪存数据。

最后,我们可以在视图中为任何需要提交POST、PUT或DELETE请求的表单添加CSRF令牌字段。使用csrf_field方法即可在表单中生成CSRF令牌字段,如下所示:

<form method="POST" action="/example">
    {{ csrf_field() }}

    <!-- Your form fields go here... -->

    <button type="submit">Submit</button>
</form>
登录后复制

总结

在本文中,我们介绍了如何在Laravel中使用中间件保护应用免受CSRF攻击。我们通过配置CSRF令牌、使用默认的VerifyCsrfToken中间件以及自定义CSRF错误处理方式等措施,有效地提高了应用的安全性。相信这些技术可以帮助您构建更加安全的Web应用程序。

以上就是如何在Laravel中使用中间件进行跨站请求伪造(CSRF)保护的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号