Laravel 批量注入的安全处理,通过模型的 fillable 和 guarded 解决
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 解决相关推荐
- efcore mysql autofac_Asp.NetCore3.1版本的CodeFirst与经典的三层架构与AutoFac批量注入
Core3.1 CodeFirst与AutoFac批量注入(最下面附GitHub完整 Demo,由于上传网速较慢,这里就直接压缩打包上传了) ===Core3.1 CodeFirst 数据库为远程阿里 ...
- php 隐式路由,关于Laravel 7 的简单隐式路由模型绑定
搜索热词 Laravel 的下一个主要发行版本 ,你可以直接在路由定义中自定义隐式路由模型绑定: Route::get('/posts/{post:slug}',function (Post $pos ...
- assembly 输出ab中所有数_.NET Core中批量注入Grpc服务
(给DotNet加星标,提升.Net技能) 转自:张子浩cnblogs.com/ZaraNet/p/12167517.html GRPC 是谷歌发布的一个开源.高性能.通用RPC服务,尽管大部分 RP ...
- laravel 模型里自定义属性_关于Laravel 7 的简单隐式路由模型绑定
Laravel 的下一个主要发行版本 ,你可以直接在路由定义中自定义隐式路由模型绑定: Route::get('/posts/{post:slug}', function (Post $post) { ...
- php 批量生成数量,laravel批量生成假数据的方法
D:\phpStudy\WWW\api.douxiaoli.com\database\factories\ModelFactory.php D:\phpStudy\WWW\BCCKidV1.0\ven ...
- laravel中的fillable和guarded属性
所有的Eloquent模型预设会防止批量赋值,所以需要在Model中设置fillable和guarded属性. protected $fillable = ['name']; protected $g ...
- 模型过拟合原因及解决办法
模型过拟合原因及解决办法 过拟合现象 导致过拟合原因 解决办法 过拟合现象 对于样本量有限.但需要使用强大模型的复杂任务,模型很容易出现过拟合的表现,即在训练集上的损失小,在验证集或测试集上的损失较大 ...
- laravel批量更新多条记录
写在前面 熟悉laravel的童鞋都知道,laravel有批量一次性插入多条记录,却没有一次性按条件更新多条记录. 是否羡慕thinkphp的saveAll,是否羡慕ci的update_batch,但 ...
- laravel mysql注入_laravel中如何利用反射实现依赖注入
依赖注入 在一个类中经常会依赖于其他的对象,先看一下经典的写法 class Foo { public $bar; public function __construct() { $this->b ...
最新文章
- 2.登录linun 输入密码登录不进去 进入单用户模式 修改 然后reboot
- VB.NET 快速向Excel写入大量数据
- Spring Boot解决无法访问图片的问题
- 【php】使用gdb调试php程序
- css背景上能添加文字,CSS3怎么为文字添加背景?
- SQL Server日期函数集合
- HiveSQL常用优化方法全面总结
- jeecg 查看 页面 父子表 横向滚动条效果 官方被禁用
- 服务器无法继续该事务 3400000006 错误原因--JAVA调用SQLSERVER存储过程时过程发生异常内部事务未
- vue-13-swiper组件的使用
- 一套完整的 Java 线上故障排查技巧,建议收藏!
- Java -Dfile.encoding=UTF-8 出现乱码问题原因分析
- 不知道Word转图片PDF怎么转?1分钟帮你快速转换
- IDEA设置类注解和方法注解模板(绝对可用)
- LOJ2482 CEOI2017 Mousetrap 二分答案、树形DP
- 一阶贝塞尔函数matlab,一阶贝塞尔函数
- 深入浅出进入PE世界[网络转载]
- Roadblocks(次短路)
- 达梦redo log损坏的处理办法
- [原创内容] 秒变老司机--系统更新安装和集成批处理解决方案[Win7SP1x64简体中文官方镜像专用]1.0...
热门文章
- 关注视聊效果!中星微摄像头对比测试
- Python数据挖掘与机器学习_通信信用风险评估实战(1)——读数据
- P8大佬出书了!送送送!
- 中一级计算机word2010测试题,中一级计算机WORD2010测试题(经修改)
- 用友视频教程NC65 NCV6.5财务供应链生产制造实施用友NC视频教程
- 计算机辅助工艺收获,如何在学习计算机方面获得新收获
- docker实现MySQL主主互备(主主双机热备)
- 《被讨厌的勇气》--读后感
- [数据挖掘理论与案例] 大数据的4个V
- php 股票动态图,股票动态图,看懂了秒变高手!