Laravel-CSRF攻击

  1. CSRF攻击是跨站请求伪造(Cross-site request forgery)的英文缩写,
    Laravel框架中避免CSRF攻击很简单,laravel自动为每个用户Session生成一个CSRF Token,该Token可用于验证登录用户和发起者请求是否是同一个人,如果不是则请求失败。
    Laravel提供了一个全局帮助函数csrf token来获取Token值,因此只需要在视图提交表单中添加如下HTML代码即可在请求中带上Token:
    <input type=”hidden” name=”_token” value=”<?php csrf token();?>”>

  2. laravel如何避免CSRF攻击?
    案例:实现CSRF机制的验证
    ①创建两个路由,一个用于展示表单(get),一个用于处理请求(post)
    在这里插入图片描述

②创建对应的方法
在这里插入图片描述

③创建需要的简易表单
在这里插入图片描述

提交后报错,说明laravel中csrf验证机制是默认开启的
④通过CSRF验证
解决方法:带上csrf需要的token值,随着请求传递给后续的方法
在这里插入图片描述

在浏览器查看源码会发现token
在这里插入图片描述

提交效果:
在这里插入图片描述

针对csrf_token()简化方法:
{{csrf_field()}}
两者的区别是:
csrf_token()只是输出token的值
csrf_field输出了一整个的input隐藏域

注意:当使用异步提交表单方式时,必须使用csrf_token()

  1. 从CSRF验证中排除例外路由
    并不是所有请求都需要去避免CSRF攻击,比如去第三方API获取数据的请求
    可以通过在VerifyCsrfToken(app/Http/Middleware/VerifyCsrfToken.php)中间件中将要排除的请求添加到$except属性数组(白名单)中:
    在这里插入图片描述
    例如:
    在这里插入图片描述

在VerifyCsrfToken.php中的$except编写test7的路由之后,再次提交表单后,提交成功
(排除单个路由)
在这里插入图片描述
排除所有路由:
在这里插入图片描述