Facebook如何做到这一点?检查文件类型?

时间:2013-02-03 13:00:27

标签: php facebook file-upload

  

可能重复:
  How to check file types of uploaded files in PHP?

创建一个文本文件并将其重命名为anything.jpg并尝试在Facebook上传,facebook会检测到该文件不是图像并显示Please select an image file或类似内容。他们是如何做到的呢?

我通过创建虚拟html localhostform元素在<input type="file"...上对其进行了测试,并上传了通过将文本文件重命名为something.jpg而创建的图像文件并且$_FILES['control_name']['type']中的文件类型显示image/jpeg ...如何阻止用户上传此类“假”图片。我认为使用$_FILES['control_name']['type']的限制不是解决方案,对吧?

3 个答案:

答案 0 :(得分:2)

在服务器上处理图像时,请使用图像处理库(例如getimagesize)来检测它的宽度和高度。如果失败,请拒绝图像。无论如何,您可能会生成缩略图,因此它就像一个额外的if

答案 1 :(得分:1)

检查实际文件的方法有很多种。 Facebook如何做到这一点,只有创造它的人知道我认为:)。

他们很可能会查看文件中的第一个字节。所有文件都有某些字节来描述它们的真实含义。但是,为此你需要大量的时间/金钱来创建一个数据库或者你可以用它来验证上传。

更常见的解决方案是;

FORM属性

在很多浏览器中,当然不包括Internet Explorer,您可以设置一个accept属性来检查客户端的扩展。更多信息:File input 'accept' attribute - is it useful?

扩展

这不是真正的安全,因为脚本可以用图像扩展名保存

读取文件MIME TYPE

这是您在问题中所述的解决方案。然而,这也很容易绕过,并依赖于服务器的最新状态。

处理图像

最可靠(对于大多数开发人员的技能和可用时间)将处理图像作为测试。 把它放在像GD或Imagic这样的图书馆里。当图像不是真正的图像时,它们会引发错误。但是,这将要求您保持该软件的最新状态。

简而言之,如果不花费大量时间,就没有100%的保证。即便如此,你只能得到99.9%。您应该根据上述选项权衡您的可用时间,并选择最适合您的时间。作为最佳实践,我推荐所有3种的组合。

Security: How to validate image file uploads?

中也讨论了这个主题

答案 2 :(得分:0)

文件中的标题不一样。