Laravel中的User :: create()安全吗?

时间:2014-01-02 08:13:07

标签: php laravel user-input mass-assignment

我正在努力让我的Laravel UserController尽可能精简,而不使用任何额外的套装,比如Ardent(我认为没必要;矫枉过正。)

这是我的postRegister()功能,当用户点击注册表单上的“提交”时,该功能会被路由到该功能。

public function postRegister() {
    $validator = new Services\Validators\RUser;
    if ($validator->passes()) {
        User::create(Input::all());
        return Redirect::to('login');
    }
    return Redirect::to('register')->withInput()->withErrors($validator->getErrors());
}

我发送了所有输入以在另一个类中进行验证,然后我只使用User::create()静态调用该类。我想知道这是否安全。除了idpassword_confirmation质量分配外,我的所有内容都已分配,密码在mutator函数中进行了哈希处理。

如果这不是处理用户创建的安全方法,我该怎么办呢?我应该改为创建对象的实例并手动分配值吗?提前谢谢。

2 个答案:

答案 0 :(得分:4)

基本上,Model :: Create函数执行以下步骤:

  1. 实例化新模型实例
  2. 使用输入数组,使用set-mutators填写所有无保护/可填写的模型属性(如果有)
  3. 将模型保存到DB
  4. 返回模型
  5. 因此,只要您添加不希望被大量分配到$ guarded数组的字段(或从$ fillable数组中排除它们),就不会有任何安全风险。功能与逐步构建模型然后保存它的功能大致相同。

    作为建议:输入验证应在“保存”或“创建”事件期间在模型内进行。如果在其中一个事件中返回false,则将停止创建模型。

答案 1 :(得分:1)

只要您使用您想要质量分配的值填充模型$fillable数组,这是安全的。验证所有$fillable值然后添加您要问的保护措施。

这样可以确保只有$fillable中的值在模型上填充,而忽略任何其他输入。