laravel中模型中$fillable的用法

简介: 通过正确使用 `$fillable`属性,开发者可以有效地保护应用免受批量赋值漏洞的影响。它使得只有指定的字段可以被外部用户输入影响,为应用数据的安全性提供了一道防线。在开发使用Laravel框架的应用时,恰当地设置 `$fillable`或 `$guarded`属性是一项最佳实践。

在Laravel框架中,$fillable 属性在模型(Model)中扮演着至关重要的角色。它是Laravel Eloquent ORM系统提供的一个安全特性,用于防止所谓的“批量赋值漏洞”(Mass Assignment Vulnerability)。本文将深入探讨 $fillable的用途、如何使用它以及为何它如此重要。

$fillable属性的用途

在日常开发过程中,我们经常需要从用户那里接收数据,并将这些数据保存到数据库中。Laravel提供了方便的批量赋值(Mass Assignment)功能,使得开发者可以一次性赋值多个属性。然而,这项功能如果没有适当的限制,也可能带来安全风险。攻击者可能会通过批量赋值漏洞,向数据库写入不应被修改的字段。为了解决这个问题,Laravel引入了 $fillable属性,让我们定义哪些字段可以被批量赋值。

使用 $fillable

在Laravel的Eloquent模型中,$fillable是一个数组,包含了可以被批量赋值的字段名。通过设置这个属性,任何不在该数组中的字段都不会被批量赋值,从而提高了应用程序的安全性。

举个例子,假设我们有一个 User模型,包含 name, email, 和 password字段。如果希望这三个字段都可以通过批量赋值来更新,则可以在 User模型中设置如下:

class User extends Model
{
    protected $fillable = ['name', 'email', 'password'];
}

现在,如果我们使用Eloquent的 create方法或是在实例化模型后调用 fill方法,只有在 $fillable数组中列出的字段会被赋值。

$user = User::create([
    'name' => 'John Doe',
    'email' => 'john@example.com',
    'password' => 'secret',
    'is_admin' => 1 // 假设这是不希望通过用户输入直接赋值的字段
]);

由于 is_admin字段没有在 $fillable数组中指定,它不会被批量赋值,从而保证了数据的安全性。

$fillable$guarded

Laravel提供了另外一个与 $fillable对立的属性 $guarded。与 $fillable指定"哪些字段可以被批量赋值"不同,$guarded指定的是"哪些字段不可以被批量赋值"。

一般情况下,应该只使用其中一种方法来保护你的模型,要么是 $fillable,要么是 $guarded。使用两者中的一种,根据具体场景和个人偏好选择最适合你的项目的那个。

结论

通过正确使用 $fillable属性,开发者可以有效地保护应用免受批量赋值漏洞的影响。它使得只有指定的字段可以被外部用户输入影响,为应用数据的安全性提供了一道防线。在开发使用Laravel框架的应用时,恰当地设置 $fillable$guarded属性是一项最佳实践。

目录
相关文章
|
移动开发 前端开发 JavaScript
分享45个Bootstrap模板,总有一款适合您
分享45个Bootstrap模板,总有一款适合您
302 5
|
前端开发 API 数据处理
laravel系列(三) Dcat admin框架工具表单以及普通表单的使用
laravel系列(三) Dcat admin框架工具表单以及普通表单的使用
1594 0
|
存储 PHP 数据库
Laravel-admin实现时间戳和自定义日期的自动转换
今天介绍我在使用laravel-admin遇到的坑,我数据库存储的时间是int类型的时间戳,需要在管理后台展示日期怎么优雅的实现呢?
1560 0
Laravel-admin实现时间戳和自定义日期的自动转换
|
NoSQL 数据可视化 关系型数据库
推荐几个好用的redis可视化工具
推荐几个好用的redis可视化工具
16111 1
|
安全 数据管理 PHP
详尽解析:如何在 Laravel 中实现软删除
【8月更文挑战第31天】
420 0
|
消息中间件 缓存 网络协议
Kafka简介及使用PHP处理Kafka消息
Kafka简介及使用PHP处理Kafka消息
671 0
Kafka简介及使用PHP处理Kafka消息
|
PHP 数据库
laravel表单验证的exists、unique去除软删除字段的校验
虽然Laravel的验证系统非常强大和灵活,但在处理软删除数据时仍需要特别注意。通过正确使用验证规则,并在需要时创建自定义验证规则,你可以确保应用的数据验证既准确又高效。记得在对 `unique`和 `exists`规则进程自定义时,清晰地注明你排除软删除记录的意图,这将使得代码更容易理解和维护。
325 4
|
7月前
|
运维 应用服务中间件 nginx
docker运维查看指定应用log文件位置和名称
通过本文的方法,您可以更高效地管理和查看Docker容器中的日志文件,确保应用运行状态可控和可监测。
753 28
|
安全 PHP 数据库
laravel中模型中$fillable的用法
通过正确使用 `$fillable`属性,开发者可以有效地保护应用免受批量赋值漏洞的影响。它使得只有指定的字段可以被外部用户输入影响,为应用数据的安全性提供了一道防线。在开发使用Laravel框架的应用时,恰当地设置 `$fillable`或 `$guarded`属性是一项最佳实践。
153 0
|
前端开发 安全 开发工具
前端场景的代码部署方式都有那些?
【4月更文挑战第17天】本文分析了四种常见的前端代码部署方式:FTP/SFTP、Git、Docker和云服务平台部署。FTP/SFTP简单易用但效率低;Git提供版本控制,适合自动化部署,但有学习成本;Docker确保环境一致性,高效扩展,但较复杂;云服务平台弹性伸缩,高可用,但可能产生依赖和成本。选择部署方式应综合考虑项目需求、技术能力和成本。
391 0