0

可能重复:
如何在 PHP 中检查上传文件的文件类型?

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

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

4

3 回答 3

2

当您在服务器上处理图像时,使用图像处理库(getimagesize例如)来检测它的宽度和高度。如果失败,则拒绝该图像。无论如何,您可能都会这样做来生成缩略图,所以它就像一个额外的if.

于 2013-02-03T13:05:14.123 回答
1

有很多方法可以检查实际文件。Facebook 是如何做到的,我认为只有创建它的人才知道 :)。

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

更常见的解决方案是;

表格属性

在很多浏览器中,当然不包括 Internet Explorer,您可以设置一个接受属性来检查扩展客户端。更多信息在这里:文件输入“接受”属性 - 它有用吗?

延期

这并不安全,因为可以使用图像扩展名保存脚本

读取文件 MIME 类型

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

处理图像

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

简而言之,如果不花费大量时间,就无法 100% 保证能够捕捉到这一点。即使那样你也只能得到 99,9%。您应该根据上述选项权衡您的可用时间,然后选择最适合您的时间。作为最佳实践,我建议将所有 3 个组合起来。

安全性:如何验证图像文件上传?

于 2013-02-03T13:12:45.147 回答
0

您文件中的标题将不一样。

于 2013-02-03T13:07:04.870 回答