我有一段时间这个问题了:文件的MIME类型究竟是如何确定的?我相信这是通过检查文件的特定字节是否包含已知的magic numbers/file signatures来完成的,对吗?
如果是这样,这就提出了另一个问题,可以说我将带有假GIF文件签名的bash脚本上传到仅允许上传图片的网站,会发生什么?任何一个:
image/gif
错误地返回为mimetype,并且允许上传继续我没有安装ATM的HEX编辑器,并且我不喜欢从测试中得出与安全性相关的结论,因为我可能会遗漏(或误解)某些东西,所以我的问题是:以上哪个选项是正确的?
另外,还有其他最佳实践(除了检查mimetype之外)以确保任何给定的文件实际上是看起来/需要(或允许)的东西吗?提前致谢。
PS:请注意,我不是在问
type
超全局变量中的$_FILES
索引。 最佳答案
我的理解是文件上传代码中的MIME确定例程非常粗糙,并且$ _FILES数组中的MIME类型根本无法被信任。根据我的经验,它很容易被欺骗。
最好使用Fileinfo库,该库提供了更强大的文件类型检测功能。
http://www.php.net/manual/en/ref.fileinfo.php