我正在考虑将上传的文档保存到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()
,但它总是会给我发送一个“text / plain”,其中包含我发送的任何文件(我不知道我是否做错了)。
有什么我可以添加的,以使这个过程更加安全吗?
答案 0 :(得分:2)
您将不可避免地遇到的一个问题是,浏览器可能会不恰当地标记文件的mime类型。例如,有一个常见的Firefox错误,可以将大多数文件标记为application / octet-stream,即使该文件确实是doc或pdf,或xls文件等。“最安全”的事情是扫描文件服务器端,其中还应包括病毒检查。但是,如果您的服务器访问受限,则可能无法执行此操作。
我过去曾使用过ClamAv(http://www.clamav.net/lang/en/)来做到这一点。
有关详细信息,请参阅http://sourceforge.net/projects/php-clamav/。