我有一个上传表单,允许上传大多数文件类型 . 他们来了:
图片:jpg / jpeg / png / gif ...
视频:mp4 / avi / wmv ...
其他文件:doc / pdf / rar / zip / mp3 / ...
对于图像文件,我知道我可以使用PHP函数getimagesize()或其他东西来确保它是真实的图像 . 但是视频和文档等其他文件呢?它是不是伪造扩展名的真实文件吗?
怎么做?
谢谢!我需要你的帮助 .
每个文件都有自己的类型,它叫做mime类型,所以你可以检查mime类型,做一些像这样的事情:
if (mime_content_type($FILES['file']['tmp'])== "image/png")) { // do upload }else{ die('file type not supported');}
u can put all the mime type into an array the check the type with in_array function 你可以在这里找到所有的mime类型:http://www.freeformatter.com/mime-types-list.html
任何客户端检查(甚至浏览器mime类型检测)都注定要失败,因为用户可以访问它 . 您最好让上传开始并完成,然后执行严格的服务器端检查 . 如果这不是您期望的那样,您只需丢弃该文件 .
在服务器端检查之上,您当然可以实施客户端检查,以获得更整洁的用户体验
完全保护文件上载的唯一方法是尝试使用PHP或其他需要特定有效文件类型的扩展/工具来解析上载的文件 . 换一种说法:
图像:使用GD函数解析文件,它们'll return false if it isn' t是有效图像 .
视频:可能在命令行上使用ffmpeg验证并检查输出或使用此处建议的ID3扩展名:https://stackoverflow.com/a/134893(归功于Zathrus Writer对链接到此问题的问题的评论)
Documents:尝试使用PHPExcel / Word / PowerPoint加载文件,虽然我不确定这些文档是否支持这些文档的任何格式,因为它适用于OpenXML .
从查看getID3扩展,这可能是最好的选择,因为它似乎解析了各种各样的内容类型 .
在任何情况下,您实际需要的是PHP或其他第三方库/扩展,以确定文件的二进制数据与其MIME内容类型相对应 .
希望这可以帮助 :)
3 回答
每个文件都有自己的类型,它叫做mime类型,所以你可以检查mime类型,做一些像这样的事情:
u can put all the mime type into an array the check the type with in_array function 你可以在这里找到所有的mime类型:http://www.freeformatter.com/mime-types-list.html
任何客户端检查(甚至浏览器mime类型检测)都注定要失败,因为用户可以访问它 . 您最好让上传开始并完成,然后执行严格的服务器端检查 . 如果这不是您期望的那样,您只需丢弃该文件 .
在服务器端检查之上,您当然可以实施客户端检查,以获得更整洁的用户体验
完全保护文件上载的唯一方法是尝试使用PHP或其他需要特定有效文件类型的扩展/工具来解析上载的文件 . 换一种说法:
图像:使用GD函数解析文件,它们'll return false if it isn' t是有效图像 .
视频:可能在命令行上使用ffmpeg验证并检查输出或使用此处建议的ID3扩展名:https://stackoverflow.com/a/134893(归功于Zathrus Writer对链接到此问题的问题的评论)
Documents:尝试使用PHPExcel / Word / PowerPoint加载文件,虽然我不确定这些文档是否支持这些文档的任何格式,因为它适用于OpenXML .
从查看getID3扩展,这可能是最好的选择,因为它似乎解析了各种各样的内容类型 .
在任何情况下,您实际需要的是PHP或其他第三方库/扩展,以确定文件的二进制数据与其MIME内容类型相对应 .
希望这可以帮助 :)