当前位置: 首页 > 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 自带的批量赋值机制过滤一遍敏感信息,然后我们自己来过滤敏感信息的输入。

相关文章:

  • leetcode-hot-100(哈希)
  • 操作系统学习笔记第2章 (竟成)
  • RENAME 语句与RENAME选项学习
  • TCP Socket编程
  • C语言_函数hook_LD_PRELOAD原理和示例
  • opencv处理图像(二)
  • 进阶二:基于HC-SR04和LCD1602的超声波测距
  • 【ts】for in对象时,ts如何正确获取对应的属性值
  • sched_fair 调度:负载权重、虚拟运行时间与最小虚拟时间
  • Js 判断浏览器cookie 是否启用
  • 2025盘古石初赛WP
  • linux 开发小技巧之git增加指令别名
  • 路由策略和策略路由的区别以及配置案例
  • 用Python绘制动态彩色ASCII爱心:技术深度与创意结合
  • FHE与后量子密码学
  • 解决使用宝塔Linux部署前后端分离项目遇到的问题
  • Nakama:让游戏与应用更具互动性和即时性
  • 相机Camera日志分析之八:高通Camx HAL架构opencamera三级日志详解及关键字
  • spring中的@Inject注解详情
  • linux perf top分析系统性能
  • 总导演揭秘十五运会闭幕式:赴一场星辰大海之约
  • 中消协点名新能源汽车行业:定金退款争议频发
  • 首批18位!苏联籍抗日航空英烈信息更新
  • 外交部回应西班牙未来外交战略:愿与之一道继续深化开放合作
  • 李云泽:小微企业融资协调工作机制已发放贷款12.6万亿元
  • 重庆荣昌机关食堂五一期间受热捧:肉类总消耗2万斤,单日吃卤鹅800只