Laravel 为了方便数据进行批量操作,提供了批量赋值机制。假如要在数据表中插入一条记录,我们可以使用模型做如下操作:

$article = Article:create($request->all());

这样我们直接将表单提交过来的数据直接写入了数据库(很方便),但是这样做非常不安全。对于用户输入的数据,我们应该永远谨慎对待。假如我们的 articles 表里有一个字段 user_id,是用来标记发布者的,按照以上的写法,用户可以伪造成任何人发布内部。只需要模拟表单提交并设定 user_id 字段即可。这个问题就是我们所讲的 批量注入 的安全问题。

那么如何解决批量注入的安全问题?

Laravel 中的模型提供了 fillable 和 guarded,是专门用来解决批量注入的问题,二者是互斥关系,存在一个就好,如果同时存在,fillable 的优先级更高。

fillable 变量存储允许自动填充的模型字段,可以理解为字段白名单,比如:

protected  $fillable = ['title', 'body', 'category_id'];

guarded 变量存储不允许自动填充的模型字段,可以理解为黑名单,比如:

protected  $guarded=['user_id'];

有时,我们希望通过 Article::create($data) 的方式存储表单数据,我们会在 $data 在存放一些敏感数据,但是一些敏感数据,create 会自动过滤掉怎么办?难道要存入数据库之后再......

$article->user_id = Auth::id();
$article->save();

这样要写入两次数据库。我们可以这么来:

$article= new Article($data);
$article->user_id = Auth::id();
$article->save();

我们先使用 Laravel 自带的批量赋值机制过滤一遍敏感信息,然后我们自己来设置敏感信息的输入。

注意:

当模型中未指定 fillable 和 guarded 时,即 $fillable = [],$guarded=['*'] 时,传入模型实例化参数时会报 MassAssignmentException  错误。当你看到此信息时,应该是欣慰的,因为这是 Laravel 为避免你进行批量输入而报的的安全问题。

Laravel 批量注入的安全处理,通过模型的 fillable 和 guarded 解决相关推荐

  1. efcore mysql autofac_Asp.NetCore3.1版本的CodeFirst与经典的三层架构与AutoFac批量注入

    Core3.1 CodeFirst与AutoFac批量注入(最下面附GitHub完整 Demo,由于上传网速较慢,这里就直接压缩打包上传了) ===Core3.1 CodeFirst 数据库为远程阿里 ...

  2. php 隐式路由,关于Laravel 7 的简单隐式路由模型绑定

    搜索热词 Laravel 的下一个主要发行版本 ,你可以直接在路由定义中自定义隐式路由模型绑定: Route::get('/posts/{post:slug}',function (Post $pos ...

  3. assembly 输出ab中所有数_.NET Core中批量注入Grpc服务

    (给DotNet加星标,提升.Net技能) 转自:张子浩cnblogs.com/ZaraNet/p/12167517.html GRPC 是谷歌发布的一个开源.高性能.通用RPC服务,尽管大部分 RP ...

  4. laravel 模型里自定义属性_关于Laravel 7 的简单隐式路由模型绑定

    Laravel 的下一个主要发行版本 ,你可以直接在路由定义中自定义隐式路由模型绑定: Route::get('/posts/{post:slug}', function (Post $post) { ...

  5. php 批量生成数量,laravel批量生成假数据的方法

    D:\phpStudy\WWW\api.douxiaoli.com\database\factories\ModelFactory.php D:\phpStudy\WWW\BCCKidV1.0\ven ...

  6. laravel中的fillable和guarded属性

    所有的Eloquent模型预设会防止批量赋值,所以需要在Model中设置fillable和guarded属性. protected $fillable = ['name']; protected $g ...

  7. 模型过拟合原因及解决办法

    模型过拟合原因及解决办法 过拟合现象 导致过拟合原因 解决办法 过拟合现象 对于样本量有限.但需要使用强大模型的复杂任务,模型很容易出现过拟合的表现,即在训练集上的损失小,在验证集或测试集上的损失较大 ...

  8. laravel批量更新多条记录

    写在前面 熟悉laravel的童鞋都知道,laravel有批量一次性插入多条记录,却没有一次性按条件更新多条记录. 是否羡慕thinkphp的saveAll,是否羡慕ci的update_batch,但 ...

  9. laravel mysql注入_laravel中如何利用反射实现依赖注入

    依赖注入 在一个类中经常会依赖于其他的对象,先看一下经典的写法 class Foo { public $bar; public function __construct() { $this->b ...

最新文章

  1. 2.登录linun 输入密码登录不进去 进入单用户模式 修改 然后reboot
  2. VB.NET 快速向Excel写入大量数据
  3. Spring Boot解决无法访问图片的问题
  4. 【php】使用gdb调试php程序
  5. css背景上能添加文字,CSS3怎么为文字添加背景?
  6. SQL Server日期函数集合
  7. HiveSQL常用优化方法全面总结
  8. jeecg 查看 页面 父子表 横向滚动条效果 官方被禁用
  9. 服务器无法继续该事务 3400000006 错误原因--JAVA调用SQLSERVER存储过程时过程发生异常内部事务未
  10. vue-13-swiper组件的使用
  11. 一套完整的 Java 线上故障排查技巧,建议收藏!
  12. Java -Dfile.encoding=UTF-8 出现乱码问题原因分析
  13. 不知道Word转图片PDF怎么转?1分钟帮你快速转换
  14. IDEA设置类注解和方法注解模板(绝对可用)
  15. LOJ2482 CEOI2017 Mousetrap 二分答案、树形DP
  16. 一阶贝塞尔函数matlab,一阶贝塞尔函数
  17. 深入浅出进入PE世界[网络转载]
  18. Roadblocks(次短路)
  19. 达梦redo log损坏的处理办法
  20. [原创内容] 秒变老司机--系统更新安装和集成批处理解决方案[Win7SP1x64简体中文官方镜像专用]1.0...

热门文章

  1. 关注视聊效果!中星微摄像头对比测试
  2. Python数据挖掘与机器学习_通信信用风险评估实战(1)——读数据
  3. P8大佬出书了!送送送!
  4. 中一级计算机word2010测试题,中一级计算机WORD2010测试题(经修改)
  5. 用友视频教程NC65 NCV6.5财务供应链生产制造实施用友NC视频教程
  6. 计算机辅助工艺收获,如何在学习计算机方面获得新收获
  7. docker实现MySQL主主互备(主主双机热备)
  8. 《被讨厌的勇气》--读后感
  9. [数据挖掘理论与案例] 大数据的4个V
  10. php 股票动态图,股票动态图,看懂了秒变高手!