问题描述
|
我正在考虑将上传的文档保存到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/。