接受CSV文件时,application/octet-stream是一种安全的MIME类型吗?

8
我正在构建一个Web表单,用于接收CSV文件并将其导入联系人数据库。然而,在开发过程中,我注意到上传CSV文件时可用的MIME类型是“application/octet-stream”。
在Google上进行快速搜索告诉我,“application/octet-stream”是二进制文件的通用MIME类型,可以是任何文件,从“.csv”到“.exe”,这似乎对我来说不安全,因为我仅有的其他确定文件类型的信息是原始文件名。而这可以很容易地被具有基本计算机知识的任何人更改。
如何确保通过PHP Web表单上传的CSV文件实际上是带有上述信息的CSV文件?

你已经取得进展了吗?如果需要帮助,请告诉我。 - Michiel Pater
3个回答

7

没错,application/octet-stream是一种通用的MIME类型。

您可以检查文件是否具有CSV扩展名,并使用函数fgetcsv()来确定文件内容是否有效。如果读取CSV文件时存在问题,则此函数将返回NULL或布尔值false。


谢谢,Michiel。我不确定如何确切地判断我是否得到了一个CSV文件,并且对仅依靠文件扩展名和文件名感到不安,但知道fgetcsv()在出错时返回false是很好的,我会采取这种方法。 - Martin Bean

1

为了验证文件,您不应该依赖于MIME类型,因为这很容易被操纵。文件扩展名也是同样的情况。只需要15秒就可以绕过这种“安全检查”。

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


0

上传文件时,您绝不能依赖 MIME 类型。因为它们可能会被用户篡改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接