Laravel - CSRF 保护

  • 简述

    CSRF 是指针对 Web 应用程序的跨站伪造攻击。CSRF 攻击是系统经过身份验证的用户执行的未经授权的活动。因此,许多 Web 应用程序很容易受到这些攻击。
    Laravel 通过以下方式提供 CSRF 保护 -
    Laravel 包含一个内置的 CSRF 插件,可为每个活动用户会话生成令牌。这些令牌验证操作或请求是否由相关的经过身份验证的用户发送。
  • 执行

    本节详细讨论 Laravel 中 CSRF 保护的实现。在进一步进行 CSRF 保护之前,请注意以下几点 -
    • CSRF 在 Web 应用程序内声明的 HTML 表单中实现。您必须在表单中包含隐藏的经过验证的 CSRF 令牌,以便 Laravel 的 CSRF 保护中间件可以验证请求。语法如下所示 -
    
    <form method = "POST" action="/profile">
       {{ csrf_field() }}
       ...
    </form>
    
    • 您可以使用 JavaScript HTTP 库方便地构建 JavaScript 驱动的应用程序,因为这包括每个传出请求的 CSRF 令牌。
    • 该文件即resources/assets/js/bootstrap.js注册 Laravel 应用程序的所有令牌并包括meta存储的标签csrf-tokenAxios HTTP library.

    没有 CSRF 令牌的表单

    考虑以下代码行。它们显示了一个采用两个参数作为输入的表单:emailmessage.
    
    <form>
       <label> Email </label>
          <input type = "text" name = "email"/>
          <br/>
       <label> Message </label> <input type="text" name = "message"/>
       <input type = ”submit” name = ”submitButton” value = ”submit”>
    </form>
    
    上述代码的结果是最终用户可以查看的如下形式 -
    联系表
    上面显示的表格将接受授权用户的任何输入信息。这可能会使 Web 应用程序容易受到各种攻击。
    请注意,提交按钮包含控制器部分的功能。这postContact函数在控制器中用于关联视图。如下所示 -
    
    public function postContact(Request $request) {
       return $request-> all();
    }
    
    请注意,该表单不包含任何 CSRF 令牌,因此作为输入参数共享的敏感信息很容易受到各种攻击。

    带有 CSRF 令牌的表单

    以下代码行向您展示了使用 CSRF 令牌重新设计的表单 -
    
    <form method = ”post” >
       {{ csrf_field() }}
       <label> Email </label>
       <input type = "text" name = "email"/>
       <br/>
       <label> Message </label>
       <input type = "text" name = "message"/>
       <input type = ”submit” name = ”submitButton” value = ”submit”>
    </form>
    
    实现的输出将返回带有令牌的 JSON,如下所示 -
    
    {
       "token": "ghfleifxDSUYEW9WE67877CXNVFJKL",
       "name": "TutorialsPoint",
       "email": "contact@jc2182.com"
    }
    
    这是单击提交按钮时创建的 CSRF 令牌。