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 标记,该标记使用 Axios HTTP 库 存储 csrf-token。
没有 CSRF 令牌的表单
考虑以下几行代码。它们显示了一个以两个参数作为输入的表单:email 和 message。
<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": "421660149@qq.com" }
这是单击提交按钮时创建的 CSRF 令牌。