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

相关推荐
乐维_lwops7 分钟前
案例解读:大型综合性科创产业园运维监控落地实践
运维·网络·人工智能·安全·it监控·国产运维智能体
这个DBA有点耶11 分钟前
信创场景下数据同步软件怎么选?对比开源CDC与原生闭环工具的结构性差异
数据库·mysql·架构
多客:duokelijie44 分钟前
代练订单系统选型思路:跨品类游戏接入、订单分层管理、自动结算逻辑拆解!
数据库·mysql·微信小程序·前端框架·uni-app·php·持续部署
PingCAP1 小时前
平凯星辰上榜!2026 年胡润全球独角兽企业
数据库
PingCAP1 小时前
轨道交通 AFC 系统升级,平凯 Loop 把跨部门协同变成可追溯闭环
数据库
m0_715674432 小时前
政务泛监测体系能力排行:AI 重塑监测边界,治理的颗粒度革命
大数据·网络·人工智能·安全·网络安全·政务
山东科恩光电2 小时前
安全触边在智能制造产线自动化设备防夹伤防护中的选型与应用实践
安全
java_logo2 小时前
Docker 部署 CloudBeaver:轻松搭建网页数据库管理平台
数据库·docker·容器·数据库管理·dbeaver·轩辕镜像·cloudbeaver
李白客3 小时前
AI 数据库落地 NL2SQL:准确率卡在四成,问题在表注释不在模型
数据库
躺柒3 小时前
读数据安全架构设计与实践20安全政策文件体系(上)
大数据·人工智能·安全·数据安全·安全架构·安全体系