我正在构建一个Web表单来获取CSV文件,然后将内容导入到联系人数据库中。但是,在开发过程中,我注意到在上传CSV文件时,我可用的MIME类型为application/octet-stream
。
Google上的快速网络搜索告诉我,application/octet-stream
是二进制文件的通用MIME类型,可以是.csv
到.exe
文件中的任何内容对我来说似乎是安全的,因为我必须确定文件类型的唯一其他信息是原始文件名。任何拥有基本计算知识的人都可以轻松改变这一点。
如何确保通过PHP中的网络表单上传的CSV文件实际上是包含上述信息的CSV文件?
答案 0 :(得分:6)
这是正确的,application/octet-stream
是一种通用的MIME类型。
您可以检查文件是否具有CSV扩展名,并使用函数fgetcsv()来确定文件内容是否有效。如果在将文件读取为CSV时出现问题,此函数将返回NULL或布尔值false。
答案 1 :(得分:1)
要验证文件,您不应该依赖于mime类型,因为这很容易被操作。文件扩展名也一样。它只需要15秒就可以绕过这种“安全检查”。
唯一安全方法是检查文件的内容,看它是否包含有效的csv-data。
答案 2 :(得分:0)
上传文件时,您绝不应该从不依赖MIME类型。它们可以由用户更改。