当前位置: 首页 > news >正文

Laravel 安全:批量赋值 fillable 与 guarded

Laravel 的模型中有两个 protected 字段 fillable 与 guarded,注意:必须是 protected 以上开放程度。 我们经常通过提交表单进行数据的增删改,为了方便的进行数据批量修改操作 Laravel 提供了批量赋值机制:

假如我们想要在数据库表中添加一行,我们可以使用模型这么操作:

$post = Post::create($request->all());
这样我们就直接将表单中提交过来的所有信息直接录入进了数据库,是不是很方便,但是 这样是非常不安全的,对于用户输入的数据,我们应该永远的谨慎对待。 假如我们的 posts 表里有一个字段 user_id,是用来标记发布者的,按照以上的写法,用户可以伪造成任何人发布内容,只需要模拟表单提交并设定 user_id 字段即可。 此问题是被我们也称为批量注入 的安全问题。

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

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

protected  $fillable = ['title', 'body', 'category_id'];
而 guarded 变量存储 不允许 自动填充的模型字段,是修改字段的黑名单,比如:

protected  $guarded=['user_id'];
有时候我们希望通过 Post::create($data) 的方式存储表单数据,我们会在 $data 中存放一些敏感信息,但是一些敏感信息,create 方法会直接过滤掉怎么办?难道要存入数据库之后再....

$post->user_id = Auth::id();
$post->save();
这不是要写入两次数据库!我们可以这么来:

$post = new Post($data);
$post->user_id = Auth::id();
$post->save();
我们先使用 Laravel 自带的批量赋值机制过滤一遍敏感信息,然后我们自己来过滤敏感信息的输入。

http://www.xdnf.cn/news/370639.html

相关文章:

  • PostgreSQL 的 pg_advisory_lock_shared 函数
  • 使用FastAPI微服务在AWS EKS上实现AI会话历史的管理
  • Python 对象引用、可变性和垃圾 回收(变量不是盒子)
  • K8S Svc Port-forward 访问方式
  • 【C++】 —— 笔试刷题day_27
  • Linux在web下http加密和配置虚拟主机及动态页面发布
  • 5.2 参数管理
  • Vue 两种导航方式
  • API 网关核心功能解析:负载均衡、容灾、削峰降级原理与实战摘要
  • Linux笔记---System V共享内存
  • uniapp+vue3+firstUI时间轴 提现进度样式
  • 比 Mac 便笺更好用更好看的便利贴
  • 源码示例:使用SpringBoot+Vue+ElementUI+UniAPP技术组合开发一套小微企业ERP系统
  • CentOS7.9部署FunASR实时语音识别接口 | 部署商用级别实时语音识别接口FunASR
  • milvus+flask山寨复刻《从零构建向量数据库》第7章
  • LeetCode 2918.数组的最小相等和:if-else
  • OpenCv实战笔记(4)基于opencv实现ORB特征匹配检测
  • Web3 初学者的第一个实战项目:留言上链 DApp
  • 协议路由与路由协议
  • 【图书管理系统】深度讲解:图书列表展示的后端实现、高内聚低耦合的应用、前端代码讲解
  • PXE_Kickstart_无人值守自动化安装系统
  • 物业企业绩效考核制度与考核体系
  • 前端弹性布局:用Flexbox构建现代网页的魔法指南
  • vue2 上传pdf,拖拽盖章,下载图片
  • 前端开发实战:用React Hooks优化你的组件性能
  • [C] 第10章 预处理命令
  • LeetCode热题100--240.搜索二维矩阵--中等
  • 达索MODSIM实施成本高吗?哪家服务商靠谱?
  • 思考:(linux) tmux 超级终端快速入门的宏观思维
  • Java—— 集合 List