PHP文件上传:基于mime或扩展名的验证?
当我尝试处理文件上传时,是否应该基于文件MIME类型或文件扩展名运行验证?
这两种文件验证方式的优缺点是什么?
而且,我应该关注其他任何安全问题吗?
这些天来,我一直依靠MIME类型,但是这篇文章中投票最多的答案是
PHP中的文件上传问题说:
永远不要依赖浏览器提交的MIME类型!
回答:
好的,对于这里的所有热心人士,我都在讲一些关于“螺丝扩展,检查MIME!FILEINFO RLZ!”的内容,我已经准备了一些教程:
- 下载我画的这个漂亮的php徽标
- 查看它。很好,不是吗?
- 将其重命名为what_you_like.php
- 放入所有超赞的MIME类型/任何检查器中
- 运行
总之,你永远也不会 依靠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