【发布时间】:2012-09-25 16:18:07
【问题描述】:
过去几周我一直在研究这个话题,我真的开始烦恼我找不到明确的答案。
我有一个网站,用户可以在其中上传自己的个人资料图片。我想确保唯一允许上传的文件是 JPEG、GIF 和 PNG
显然,使用浏览器发送的 mime 类型进行验证是一个很大的禁忌,因为它很容易被欺骗,因此排除了这种情况,而且不用说永远不要验证文件扩展名。
接下来是 PHP 提供的新的(ish)finfo 函数。我暂时一直在使用它,因为它似乎是最好的可用方法,但在http://www.php.net/manual/en/ref.fileinfo.php 阅读 cmets 似乎也可以被欺骗。另外我不确定只检查返回的 MIME 类型是 image/jpeg、image/gif 还是 image/png 是否过于严格?
然后有一个 getimagesize() 函数,我读到的任何不是看起来完美的图像的东西都返回 false,但如果是这种情况,为什么这里有这么多公认的答案说使用 finfo?
最后是 system() 或 exec() 调用,允许用户指定系统调用的一部分似乎有点危险!
所以我的问题是,我应该使用什么方法?我想让我的脚本尽可能安全,但也要足够开放,这样普通用户就不会因为他们的有效图像被脚本拒绝而受到惩罚
【问题讨论】:
标签: php image file-upload getimagesize