我正在努力让我的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()
静态调用该类。我想知道这是否安全。除了id
和password_confirmation
质量分配外,我的所有内容都已分配,密码在mutator函数中进行了哈希处理。
如果这不是处理用户创建的安全方法,我该怎么办呢?我应该改为创建对象的实例并手动分配值吗?提前谢谢。
答案 0 :(得分:4)
基本上,Model :: Create函数执行以下步骤:
因此,只要您添加不希望被大量分配到$ guarded数组的字段(或从$ fillable数组中排除它们),就不会有任何安全风险。功能与逐步构建模型然后保存它的功能大致相同。
作为建议:输入验证应在“保存”或“创建”事件期间在模型内进行。如果在其中一个事件中返回false,则将停止创建模型。
答案 1 :(得分:1)
只要您使用您想要质量分配的值填充模型$fillable
数组,这是安全的。验证所有$fillable
值然后添加您要问的保护措施。
这样可以确保只有$fillable
中的值在模型上填充,而忽略任何其他输入。