如果仅被视为图像,Laravel文件上传是否安全


Is Laravel File Uploading Secure if considered only image

Laravel基本上有以下函数用于input类型file

// Determine if a file was uploaded
 Input::hasFile('filename');
// Access file properties
 Input::file('name')->getRealPath();
Input::file('name')->getClientOriginalName();
Input::file('name')->getClientOriginalExtension();
Input::file('name')->getSize();
Input::file('name')->getMimeType();

如果我使用getClientOriginalExtension来查找正确的图像扩展名,getSize限制文件上传大小,getMimeType检查图像的mimetype。

我安全吗?并且对功能有信心,它不会被黑客以任何方式利用。

考虑到一个事实,我只会上传图像。

<小时 />

更新:按照以下URL使用Core PHP安全地上传文件:

http://php.w3clan.com/tutorial/47/form-handling-secure-uploading

或仅根据Laravel在规则中使用文件验证

$rule = [ 'name' => 'image' ];

对我来说

似乎很安全。

如果您只打算上传图像,则可以执行以下操作:

$rules [
    ...
    'file' => 'required|image' // Assuming it's required, otherwise leave that out
]

请参阅映像验证规则

如果要进一步限制允许的扩展,

可以指定一个包含允许的扩展的数组,然后根据它检查Input::file('file')->getClientOriginalExtension()。尽管这可能是欺骗性的,因此最好指定允许哪些 MIME 类型。

例如,如果您只想允许.png和.gif文件,则可以使用:

$allowedMimes = [
    'image/gif',
    'image/png'
];

然后使用->getMimeType()进行检查