验证上传的文件是否是实际的图像文件是否重要?

dqh*_*cks 5 php validation file-upload image

假设你可以将任何你想要的文件上传到服务器,但文件扩展名必须是".jpg".你能上传任何可能损害服务器的东西吗?

我的问题是文件类型验证很慢,我宁愿只检查文件扩展名是否足够安全.我无法想象可以使用伪装成图像的恶意软件的场景.

我已经看到了使用getimagesize()来验证图像的建议,但是这个功能非常慢,而且我无法弄清楚是否有必要,甚至是有效的,以防止恶意软件上传......

非常感谢有关此的任何信息.

hak*_*kre 3

如果您认为getimagesize()有点太慢(因为我们知道所有上传都是以超高速完成的;))您也可以尝试该fileinfo库。它至少检查文件中的一些字节。它非常快,我每天都用它来处理应用程序中的数百个文件,该应用程序应该运行得很快,而且确实如此。

然而,你不验证的东西你就不知道。因此,可能首先检查扩展名,确保安全的文件名和安全的存储,并将它们正确发送给客户端。

在让任何图像库接触它之前(这应该包括站点用户计算机上的图像库),出于安全原因,应该使用病毒扫描程序扫描该文件。与 相比,这要慢得多getimagesize(),其他人建议检查文件是否出现任何情况<?php,并防止作为有效负载上传。当然,这包括检查phar文件(如果未通过 PHP 安装安全设置(例如通过 suhosin)阻止包含)

除了按需病毒扫描之外,还应一次又一次地检查存储的文件,因为以前未知的漏洞。

所以这一部分始终是后台工作。但即使是按需实时检查通常也不会花费那么多时间,除非您的应用程序一直在上传。您可能想引入一些上传队列,以便上传已经完成,但在运行必要的任务后上传者可以使用文件。