Php 接受CSV文件时,应用程序/八位字节流是否是一种安全的MIME类型?

Php 接受CSV文件时,应用程序/八位字节流是否是一种安全的MIME类型?,php,file-upload,csv,Php,File Upload,Csv,我正在构建一个web表单,获取一个CSV文件,然后将内容导入联系人数据库。然而,在开发过程中,我注意到当上传CSV文件时,我可用的MIME类型是application/octet stream 谷歌上的快速网络搜索告诉我,application/octet stream是二进制文件的一种通用MIME类型,可以是.csv到.exe文件,这对我来说似乎不安全,因为我必须确定文件类型的唯一其他信息是原始文件名。任何一个有基础计算知识的人都可以很容易地改变这一点 如何确保在PHP中通过web表单上传的C

我正在构建一个web表单,获取一个CSV文件,然后将内容导入联系人数据库。然而,在开发过程中,我注意到当上传CSV文件时,我可用的MIME类型是
application/octet stream

谷歌上的快速网络搜索告诉我,
application/octet stream
是二进制文件的一种通用MIME类型,可以是
.csv
.exe
文件,这对我来说似乎不安全,因为我必须确定文件类型的唯一其他信息是原始文件名。任何一个有基础计算知识的人都可以很容易地改变这一点


如何确保在PHP中通过web表单上传的CSV文件实际上是包含上述信息的CSV文件?

没错,
应用程序/octet流
是一种通用MIME类型


您可以检查文件是否具有CSV扩展名,并使用该函数确定文件内容是否有效。如果将文件读取为CSV时出现问题,此函数将返回NULL或boolean false。

上载文件时,您不应依赖MIME类型。用户可以修改它们。

要验证文件,不应该依赖mime类型,因为这很容易操作。文件扩展名也是如此。绕过这种“安全检查”只需15秒


唯一的安全的方法是检查文件的内容,看看它是否包含有效的csv数据。

您是否取得了任何进展?如果我能帮你,请告诉我。谢谢,米切尔。我不确定如何才能真正判断我得到的是一个CSV,并且不太习惯于仅仅依靠文件扩展名和文件名,但是知道
fgetcsv()
在出错时返回false是很好的,我将采用这种方法。