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

use*_*643 1 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();
Run Code Online (Sandbox Code Playgroud)

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

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

考虑到一个事实,我将只上传图像.


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

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

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

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

Mis*_*Bla 6

对我来说似乎很安全.

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

$rules [
    ...
    'file' => 'required|image' // Assuming it's required, otherwise leave that out
]
Run Code Online (Sandbox Code Playgroud)

请参阅图像验证规则

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

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

$allowedMimes = [
    'image/gif',
    'image/png'
];
Run Code Online (Sandbox Code Playgroud)

然后检查使用 ->getMimeType()

  • 您可以将“|mime:png,gif”添加到验证规则 http://laravel.com/docs/4.2/validation#rule-mimes ,但请注意 mime 类型因浏览器而异(IE 和 FF ) (2认同)