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

问题描述

| 我正在考虑将上传的文档保存到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
}
我读过推荐使用
finfo_open()
的人,但是我的服务器位于PHP 5.3.0下,所以我不能使用它。我曾尝试使用
mime_content_type()
,但是它总是会向我发送带有任何类型的文件的“文本/纯文本”(我不知道我是否做错了什么)。 有什么我可以添加的,以便使此过程更安全?     

解决方法

        您将不可避免地遇到的一个问题是,浏览器可能会不适当地标记文件的mime类型。例如,有一个常见的Firefox错误,即使该文件确实是doc或pdf或xls文件等,也可以将大多数文件标记为应用程序/八位字节流。“最安全”的操作是扫描文件服务器方面,其中还应包括病毒检查。但是,如果服务器访问权限有限,则可能无法执行此操作。 我过去曾使用ClamAv(http://www.clamav.net/lang/zh/)来完成此操作。 有关更多详细信息,请参见http://sourceforge.net/projects/php-clamav/。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...