我有一个上传表单,允许上传大多数文件类型。他们来了:
- 图片:jpg/jpeg/png/gif ...
- 视频:mp4/avi/wmv ...
- 其他文件:doc/pdf/rar/zip/mp3/...
对于图像文件,我知道我可以使用 PHP 函数 getimagesize() 或其他东西来确保它是真实图像。但是其他文件,如视频和文档呢?它是一个没有伪造扩展名的真实文件吗?
怎么做?
谢谢!我需要你的帮助。
我有一个上传表单,允许上传大多数文件类型。他们来了:
对于图像文件,我知道我可以使用 PHP 函数 getimagesize() 或其他东西来确保它是真实图像。但是其他文件,如视频和文档呢?它是一个没有伪造扩展名的真实文件吗?
怎么做?
谢谢!我需要你的帮助。
任何客户端检查(甚至是浏览器 mime 类型检测)都注定会失败,因为用户可以访问它。您最好让上传开始并完成,然后执行严格的服务器端检查。如果这不是您所期望的,您只需丢弃该文件。
在服务器端检查之上,您当然可以实施客户端检查,以获得更整洁的用户体验
每个文件都有自己的类型,称为 mime 类型,所以你可以检查 mime 类型,做一些类似的事情:
if (mime_content_type($FILES['file']['tmp'])== "image/png"))
{
// do upload
}else{
die('file type not supported');}
你可以将所有的 mime 类型放入一个数组中使用 in_array 函数检查类型 你可以在这里找到所有的 mime 类型:http ://www.freeformatter.com/mime-types-list.html
完全保护文件上传的唯一方法是尝试使用 PHP 或其他需要特定有效文件类型的扩展程序/工具来解析上传的文件。换句话说:
从 getID3 扩展来看,这可能是最好的选择,因为它似乎可以解析各种各样的内容类型。
无论如何,您本质上需要的是 PHP 或其他一些 3rd 方库/扩展来确定文件的二进制数据与其 MIME 内容类型相对应。
希望这可以帮助 :)