如何检查PHP中上传文件的文件类型?

2022-08-30 10:46:29

在PHP网站上,他们建议的唯一真正的检查是在这里使用或。当然,出于各种原因,您通常不希望用户上传任何类型的文件。is_uploaded_file()move_uploaded_file()

正因为如此,我经常使用一些“严格”的哑剧类型检查。当然,这是非常有缺陷的,因为通常哑剧类型是错误的,用户无法上传他们的文件。伪造和/或更改也很容易。除此之外,每个浏览器和操作系统处理它们的方式也不同。

另一种方法是检查扩展名,这当然比哑剧类型更容易更改。

如果您只想要图像,请使用类似的东西。getimagesize()

其他类型的文件呢?PDF,Word文档还是Excel文件?甚至是纯文本文件?

编辑:如果您没有mime_content_typeFileinfo and system(“file -bi $uploadedfile”)为您提供了错误的文件类型,那么还有哪些其他选项?


答案 1

查看mime_content_type文件信息。这些是内置的 PHP 命令,用于通过查看文件的内容来确定文件类型。另外检查上面两页的评论,还有其他一些好的建议。

就我个人而言,我很幸运地使用了本质上是的东西,但我不确定这是否是最好的方法。system("file -bi $uploadedfile")


答案 2

恕我直言,所有MIME类型的检查方法都是无用的。

假设你有哪个应该有MIME型。标准方法试图找到看起来像PDF标题的东西(或类似的东西),他们会在成功时返回“好吧,好像这是一个PDF文件”。但事实上,这并不意味着什么。您可以上传仅包含的文件,并且它将通过MIME检查。application/pdf%PDF-%PDF-1.4

我的意思是,如果文件具有预期的MIME类型 - 它将始终通过MIME类型检查,否则结果未定义。


推荐