【问题标题】:Is it possible that a fillable field in Laravel can be hacked?Laravel 中的可填充字段是否有可能被黑客入侵?
【发布时间】:2020-05-01 11:24:59
【问题描述】:
class Student extends Model {
    protected $fillable = [‘first_name’, ‘last_name’, ‘email’];
}

来源:https://medium.com/@kshitij206/laravel-mass-assignment-guarded-or-fillable-7c3a64b49ca6

在 Internet 上的任何地方,他们都说要使用 fillableguarded 来确保 Laravel 的安全性。

但是如果一个字段是可填写的,那么,这个字段会被黑客入侵吗?

【问题讨论】:

  • @RonvanderHeijden 我读到了,但我仍然不确定可填充字段会发生什么。
  • @Alex01 如果将字段分配给可填充数组,则意味着当您将数组传递给Model::create() 方法时,该数组的键必须与模型的属性名称匹配。因此,如果您的意思是“被黑客入侵”是“插入”,那么是的,因为您已经明确允许这样做。只要您使用$request->only() 而不是$request->all(),就可以了。
  • 这取决于值 'admin' 的来源。如果您从 HTTP 请求参数接收它,那么是的,这是一个安全问题。重申一下,$user->type = 'admin' $user->type = $request->type
  • @Alex01 如果您不使用数组,这意味着您正在手动选择要添加的 $request 参数,那么只会添加那些 $request 参数,这意味着如果用户发送了额外的参数或不需要的参数参数,它们将被拒绝。

标签: laravel security mass-assignment


【解决方案1】:

默认情况下,所有 Eloquent 模型都受到保护以防止批量赋值,因此要使用批量赋值,您应该在模型上指定 fillableguarded 属性以使用 create 方法将新模型保存在单行。

所以下面的代码应该会导致错误

$flight = App\Flight::create(['name' => 'Flight 10', 'number' => 3]);

当你有

protected $fillable = ['name'];

因为您不能在此处批量分配 number 属性。

在此处阅读更多信息:https://laravel.com/docs/7.x/eloquent#mass-assignment

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 2011-11-25
    • 2020-11-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多