安全html + php表单上传图像和矢量文件?

时间:2013-04-26 21:50:44

标签: php forms file-upload graphics

我尝试做一个接受光栅图形和矢量图形文件的形式(它可以是:jpg,gif,psd,png,svg,eps,ai,cdr,pdf等),我想避免恶意文件。

我找到的选项:

1)自定义函数过滤扩展:它似乎不是很优雅 - 很多类型的扩展,也许我可以忘记一个 - 它似乎并不安全。或者是吗?

2)getimagesize function检查文件类型:它不适用于矢量文件 - 至少这是我理解的。还是我错了?

我没有在网上找到任何关于栅格+矢量文件形式的页面。怎么办?

1 个答案:

答案 0 :(得分:0)

我的解决方案:

接收de upload文件的PHP文件:

// get the name of original file    
$imagem = $_FILES['arquivo']['name']; 

// handle string to get extension in lower case. I think it is not a very secure handler.
$ext = strtolower(substr($imagem, strrpos($imagem, '.') + 1)); 

// array of extensions the validation accepts
$valid_ext = array ('ai', 'bmp', 'cdr', 'eps', 'gif', 'jpeg', 'jpg', 'pdf', 'png', 'psd', 'svg');    

// checking
if(in_array($ext,$valid_ext)){ 
     // file is ok. Do something
}

我首先尝试使用file types$file_infofinfo()getimagesize()来检查Mime,但其中任何一个都运行良好。我在识别EPS和CDR扩展时遇到了一些问题。它返回“application / octet-stream”,它是未知扩展的Mime Type文件。在我的研究中,我理解这是基于操作系统发送Mime文件类型信息的浏览器,因此我们遇到一个问题,即每个表单用户可以为同一个扩展名使用不同的Mime文件类型。

我也理解PHP有一个标准文件来识别Mimes,但我无法处理该文件以添加有关EPS和CDR文件的信息。

所以我不得不使用该字符串检查解决方案。