PHP文件上传:基于mime或扩展名的验证? - php

当我尝试处理文件上传时,是否应该基于文件MIME类型或文件扩展名运行验证?

这两种文件验证方式的优缺点是什么?

而且,我应该关注其他任何安全问题吗?

这些天来,我一直依靠MIME类型,但是这篇文章中投票最多的答案是

File upload issues in PHP说:

永远不要依赖浏览器提交的MIME类型!

参考方案

好的,对于这里的所有热心人士,我都在讲一些“螺丝扩展,检查MIME!FILEINFO RLZ!”的知识,我已经准备了一些教程:

下载此pretty php logo I drew
查看它。很好,不是吗?
将其重命名为what_you_like.php
放入所有超赞的MIME类型/任何检查器中
运行

总之,您永远都不要依赖MIME类型。您的Web服务器不在乎MIME类型,它决定通过EXTENSION(最终被贬低的@Col)来做什么。 Shrapnel的答案实际上是正确的。执行MIME检查时提供给您的任何信息与您的Web服务器绝对无关。

编辑:不是您想要的不常见代码,它会打开这种类型的攻击的网站:

<?php

$mimetype = mime_content_type($_FILES['file']['tmp_name']);
if(in_array($mimetype, array('image/jpeg', 'image/gif', 'image/png'))) {
   move_uploaded_file($_FILES['file']['tmp_name'], '/whatever/something/imagedir/' . $_FILES['file']['name']);
   echo 'OK';

} else {
    echo 'Upload a real image, jerk!';
}

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

PHP Laravel从另一个驱动器读取文件 - php

我目前正在学习Laravel。我想知道是否有一种方法可以在Laravel中使用Storage::从另一个硬盘访问文件(使用Windows)。例如,我在驱动器C:上安装了带有Laravel的Xampp,但是我想访问网站目录之外的E:上的文件。我试过使用Storage::files('E:')和File::files('E:…

如何在PHP中设置get_file_contents的时间限制? - php

有时get_file_contents花费的时间太长,这会挂起整个脚本。有什么方法可以设置get_file_contents的超时限制,而无需修改脚本的最大执行时间?编辑:由于该文件不存在,因此花费了很长时间。我收到“无法打开流:HTTP请求失败!”错误。但这需要永远。 参考方案 通过使用timeout option创建上下文,似乎在PHP> 5.2.…