CSRF 保护(CSRF Protection)
优质
小牛编辑
137浏览
2023-12-01
CSRF是指针对Web应用程序的跨站点伪造攻击。 CSRF攻击是系统的经过身份验证的用户执行的未授权活动。 因此,许多Web应用程序容易受到这些攻击。
Laravel以下列方式提供CSRF保护 -
Laravel包含一个内置的CSRF插件,可为每个活动用户会话生成令牌。 这些令牌验证相关的经过身份验证的用户是否发送了操作或请求。
实现 (Implementation)
本节将详细讨论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应用程序的所有令牌,并包含使用Axios HTTP library存储csrf-token meta标记。
没有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": "xnip",
"email": "contact@xnip.cn"
}
这是单击提交按钮时创建的CSRF令牌。