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-token 存储 Axios HTTP库.
请考虑以下代码行.它们显示一个表单,其中包含两个参数作为输入:电子邮件和消息.
<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令牌重新设计的表格 :
<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": "admin@it1352.com" }
这是单击提交按钮时创建的CSRF令牌.