Laravel CSRF保护

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库 一起存储。

没有CSRF令牌的表单

请考虑以下代码行。它们显示一个表单,其中包含两个输入参数: 电子邮件消息

<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>

以上代码的结果是下面显示的表单,用户可以查看-

Laravel CSRF保护

上述表单将接受来自授权用户的任何输入信息。这可能使网络应用程序容易受到各种攻击。

请注意,提交按钮在控制器部分包含功能。控制器中使用 postContact 函数来处理相关视图。如下所示:

public function postContact(Request request) {
   returnrequest-> 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@tutorialspoint.com"
}

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程