如果仅考虑图像,Laravel文件上传是否安全

时间:2014-12-25 10:06:40

标签: php file-upload laravel-4

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' ];

1 个答案:

答案 0 :(得分:5)

对我来说似乎很安全。

如果您只打算上传图片,可以这样做:

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

请参阅the image validation rule

如果要进一步限制允许的扩展名,可以指定包含所允许扩展名的阵列,然后针对它检查Input::file('file')->getClientOriginalExtension()。虽然这可能是欺骗性的,但最好指定允许哪些mime类型。

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

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

然后使用->getMimeType()

进行检查