当我尝试处理文件上传时,是否应该根据文件MIME类型或文件扩展名运行验证?
这两种文件验证方式的优缺点是什么?
而且,我应该关注任何其他安全问题吗?
在这些日子里,我依赖于MIME类型,但在这篇文章中回答最多的投票
永远不要依赖浏览器提交的MIME类型!
cyp*_*her 30
好的,所以对于这里所有关于"SCREW EXTENSIONS,CHECK MIME!FILEINFO RLZ!"的人来说,我已经准备了一些教程:
总之,你永远也不会EVER依靠MIME类型.你的网络服务器并不关心MIME类型,它决定了EXTENSION要做什么,最终是@vol.Shrapnel的回答其实是对的.通过检查MIME提供给您的任何信息在执行时都与您的网络服务器完全无关.
编辑:不那么罕见的代码,因为它想要它会为这种类型的攻击打开一个网站:
<?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!';
}
Run Code Online (Sandbox Code Playgroud)