【发布时间】:2013-03-31 05:45:20
【问题描述】:
我知道 PHP 中带有 getimagesize 和 Fileinfo 扩展名的方法,但它们都需要一些库(GD 或 Fileinfo)。
我发现此代码用于从提供的文件中检测图像:
function is_image($image_path)
{
if (!$f = fopen($image_path, 'rb'))
{
return false;
}
$data = fread($f, 8);
fclose($f);
// signature checking
$unpacked = unpack("H12", $data);
if (array_pop($unpacked) == '474946383961' || array_pop($unpacked) == '474946383761') return "gif";
$unpacked = unpack("H4", $data);
if (array_pop($unpacked) == 'ffd8') return "jpg";
$unpacked = unpack("H16", $data);
if (array_pop($unpacked) == '89504e470d0a1a0a') return "png";
return false;
}
它安全吗?要不要用?
【问题讨论】:
-
使用 getimagesize() 是最好的选择。你的代码只是检查图片的头部,如果图片中间注入了恶意怎么办?