📜  Laravel-CSRF保护

📅  最后修改于: 2020-10-23 08:08:59             🧑  作者: Mango


CSRF是指对Web应用程序的跨站点伪造攻击。 CSRF攻击是系统的经过身份验证的用户执行的未经授权的活动。因此,许多Web应用程序都容易受到这些攻击。

Laravel通过以下方式提供CSRF保护-

Laravel包含一个内置的CSRF插件,该插件为每个活动的用户会话生成令牌。这些令牌验证操作或请求是否由有关的经过身份验证的用户发送。

实作

本节将详细讨论Laravel中CSRF保护的实现。在进一步进行CSRF保护之前,需要注意以下几点-

  • CSRF在Web应用程序内部声明的HTML表单中实现。您必须在表单中包含一个经过验证的隐藏的CSRF令牌,以便Laravel的CSRF保护中间件可以验证请求。语法如下所示-

{{ csrf_field() }} ...
  • 您可以使用JavaScript HTTP库方便地构建JavaScript驱动的应用程序,因为它包括每个外发请求的CSRF令牌。

  • 该文件即resources / assets / js / bootstrap.js注册了Laravel应用程序的所有令牌,并包含标记,该标记使用Axios HTTP库存储csrf-token

没有CSRF令牌的表格

考虑下面的代码行。它们显示了一个采用两个参数作为输入的表单: emailmessage


以上代码的结果是最终用户可以在下面显示的表单-

联系表

上面显示的表格将接受来自授权用户的任何输入信息。这可能会使Web应用程序易于受到各种攻击。

请注意,提交按钮包括控制器部分中的功能。 postContact函数在该关联视图的控制器中使用。它显示如下-

public function postContact(Request $request) {
   return $request-> all();
}

请注意,该表单不包含任何CSRF令牌,因此作为输入参数共享的敏感信息容易受到各种攻击。

带有CSRF令牌的表格

以下代码行向您展示了使用CSRF令牌重新设计的表单-

{{ csrf_field() }}

实现的输出将返回带有令牌的JSON,如下所示-

{
   "token": "ghfleifxDSUYEW9WE67877CXNVFJKL",
   "name": "TutorialsPoint",
   "email": "   "
}

这是单击提交按钮时创建的CSRF令牌。