如何确保上传的文件是MS Word文档?

Fil*_*era 6 php security file-upload mime-types

我正在考虑将上传的文档保存到webroot之外的文件夹中,并使用脚本提供下载readfile(file).

但是,我想知道以下内容是否足以消除可能存在的任何类型的威胁:

$filename = basename($_FILES['uploaded_file']['name']);
$ext = substr($filename, strrpos($filename, '.') + 1);
if (($ext == "doc") && ($_FILES["uploaded_file"]["type"] == "application/msword"))
{
execute rest of the code
}
Run Code Online (Sandbox Code Playgroud)

我读过推荐使用的人finfo_open(),但我的服务器是在php 5.3.0下,所以我不能使用它.我已经尝试过使用mime_content_type()但是它总是会给我发送一个"文本/普通",我发送的任何文件(我不知道我是否做错了).

有什么我可以添加,以使这个更安全的过程?

Col*_*lin 2

您不可避免地会遇到的一个问题是浏览器可能会不恰当地标记文件的 mime 类型。例如,有一个常见的 Firefox 错误,可以将大多数文件标记为 application/octet-stream,即使该文件实际上是 doc 或 pdf、或 xls 文件等。“最安全”的做法是扫描文件服务器端,其中还应该包括病毒检查。但是,如果您的服务器访问权限有限,您可能无法执行此操作。

我过去曾使用 ClamAv ( http://www.clamav.net/lang/en/ ) 来执行此操作。

请参阅http://sourceforge.net/projects/php-clamav/了解更多详细信息。