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

6

我考虑将上传的文档保存到Web根目录之外的文件夹中,并使用脚本使用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(),但是不管我发送什么类型的文件,它都会返回"text/plain"(我不知道我是否做错了什么)。

有什么方法可以使这个过程更加安全吗?

1个回答

2
你不可避免地会遇到的一个问题是,浏览器可能会错误地标记文件的MIME类型。例如,常见的Firefox错误可以将大多数文件标记为application/octet-stream,即使文件确实是doc或pdf、xls文件等。最“安全”的做法是在服务器端扫描文件,这也应该包括病毒检查。但是,如果你的服务器访问受限,你可能无法这样做。
我以前使用过ClamAv(http://www.clamav.net/lang/en/)来处理这个问题。
更多细节请参见http://sourceforge.net/projects/php-clamav/

恐怕我不能像你说的那样做。我正在使用共享主机,有许多选项受到限制。 - Filgera

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