这是 Laravel 文档所说的:
首先,您应该定义要使质量可分配的模型属性。您可以使用模型上的 $fillable 属性执行此操作
那么为什么不让 ->fill()/::create() 方法分配所有属性呢?
好问题!这可能会带来一些启示:
为了轻松存储/更新表单中的数据,Laravel 允许您执行User::update($request->all());
现在将我想象为一个邪恶的用户:我篡改表单并添加以下字段:['role' => 'supermegaadmin']您将其存储在数据库中,我将获得一个我不应该获得的角色(这是一个过于简单的场景,但应该帮助你明白要点)
然后,您可以使用$fillable和$guarded来更好地控制可批量分配的字段。
软件框架有时允许开发人员自动将 HTTP 请求参数绑定到程序代码变量或对象中,以便开发人员更轻松地使用该框架。这有时会造成伤害。
攻击者有时可以使用这种方法来创建开发人员从未打算过的新参数,从而在程序代码中创建或覆盖非预期的新变量或对象。
这称为批量分配漏洞。
并且 laravel provider可填充批量分配漏洞,它是字段的白名单。
当用户通过请求传递意外的 HTTP 参数,并且该参数更改了数据库中您意想不到的列时,就会出现批量分配漏洞。例如,恶意用户可能会通过 HTTP 请求发送 is_admin 参数,然后将其传递到模型的 create 方法中,从而允许用户将自己升级为管理员。
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |