【问题标题】:Should i use mass assignment for file upload in laravel 5.2?我应该在 laravel 5.2 中使用批量分配文件上传吗?
【发布时间】:2016-07-21 10:33:39
【问题描述】:

希望每个人都做得很好。

我已经使用 laravel 5.2 几天了,我坚持这样的概念,即我们应该对插入的文件使用质量分配可填充 / 保护,因为文件被上传到服务器并且它的路径是存储在数据库中并从该数据库表中获取存储在媒体表中的 id。

所以我的问题实际上是我们是否应该对上传的文件进行批量分配检查以插入或更新。无论哪种方式,都需要解释。 如果可能,请附上演示示例以及所采用的方法。

提前感谢大家。

【问题讨论】:

  • 欢迎堆栈溢出 :-) 请查看How to Ask 以及如何创建minimal reproducible example。这将有助于获得有用的答案。我将此问题标记为关闭。 “请给我代码...”不是这个网站的运作方式。

标签: php laravel


【解决方案1】:

我认为文件上传和 Eloquent 批量分配的相关性不足以让您考虑这个问题。您可以在服务器上有一个固定目录,用于存储所有上传的文件,并且文件在磁盘上的名称与其关联模型的 id 相同。

只允许对您知道不会被滥用的字段进行批量分配,或者应用程序必须严格监控其值 - 但良好的验证应该可以过滤掉大部分问题。

因此,例如,您可以在控制器中使用以下内容(在进行其他文件验证后,如类型及其存在):

$user = Auth::user(); //Logged in user
$photo = new Photo([
    "caption" => $request->input('caption'),
    "location" => $request->input('location'), 
    "time" => $request->input('time'),
    "filename" => $request->file('photo')->getClientOriginalName()
]); //Eloquent model

$user->photos()->save($photo);
$request->file('photo')->move($destinationPath, $photo->id);

【讨论】:

  • !所以你是说因为文件的 id 和 eloquent 放置在数据库和存储位置,所以我不应该担心最终用户是否可以在其中放置未经授权的脚本?
  • 在回答中我说过 在进行其他文件验证(如类型及其存在)之后(您没有指定您期望的文件类型)但是Laravel 有验证规则可以用来检查文件的 mime 类型
  • 乐于助人。如果我们在这里完成,请标记已回答的问题。祝您事业蒸蒸日上!
【解决方案2】:

批量分配就是对我们从表单中获得的输入进行检查。 如果用户尝试通过编辑源代码(进入检查元素部分)并为允许的其他字段(批量分配)提供值来添加字段,则框架会忽略这些值。然而,如果我们以编程方式对控制器或模型文件中的任何值进行任何更改,更改就会生效,因为这是由后端(服务器端)的开发人员完成的,而不是由公共端的某些用户完成的。

所以是的。使用批量赋值是一个很好的做法,以确保只有允许的字段从表单中获取值,而不是我们不希望存储在数据库中的其他字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-22
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2019-06-28
    相关资源
    最近更新 更多