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

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

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

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

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

PHP中的文件上传问题说:

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

回答:

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

  1. 下载我画的这个漂亮的php徽标
  2. 查看它。很好,不是吗?
  3. 将其重命名为what_you_like.php
  4. 放入所有超赞的MIME类型/任何检查器中
  5. 运行

总之,你永远也不会 依靠MIME类型。您的Web服务器不关心MIME类型,它决定通过 来做什么,最终被

_淘汰的@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文件上传:基于mime或扩展名的验证? 的全部内容, 来源链接: utcz.com/qa/405319.html

回到顶部