好的,我允许(在脚本中)通过论坛管理员定义的方法上传某些类型的文件!如何判断这些文件是否为管理员设置的类型以确保它们不是假文件。我目前正在使用mime类型的方法,但不同的浏览器可以设置不同的mime类型,所以这并没有多大帮助。检查文件扩展名也没有帮助,因为人们可以通过为其提供允许的扩展名来解决这个问题,但是文件类型可能不同。
也许有一种方法可以检查许多不同类型文件中的字节,以确保它的类型正确?也许这也可能是假的,但至少在使用表单上传文件并提交它们时会更准确。
有人可以帮我提一下这个想法吗?
谢谢:)
答案 0 :(得分:3)
PECL fileinfo
(或内置的> 5.3)将检查文件的字节签名以猜测其mimetypes,因此它可以防止人们只是更改文件扩展名。在某些情况下,仍然可以在文件中包含恶意字节,该文件与文件类型的相应字节签名匹配。
来自PHP文档:
// Procedural style
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
echo finfo_file($finfo, $filename);
finfo_close($finfo);
// OO style
$finfo = new finfo(FILEINFO_MIME_TYPE);
echo $finfo->file($filename);
$finfo->close();
在Unix服务器上,我相信finfo_file()
会查询与GNU file
实用程序相同的字节签名数据库。
答案 1 :(得分:0)
不要相信用户输入。不应将用于检查给定文件类型/ mimetype的方法用作阻止人们将恶意内容上载到服务器的方法。如果目标是服务器安全性,那么如果用户上传了内容,则根本不允许在服务器上执行内容。对于其他人下载的文件,请务必放置免责声明,该内容是用户生成的,并且不保证无病毒。