猜测文件扩展名的最佳安全方式


best secured way to guess file extension

我正在寻找最安全的方法来确定用户发送到我的服务器的文件的扩展名。我知道我不应该信任表单发送的图像文件。在把它移到我的上传目录之前,我会从我的tmp文件开始猜测它

感谢

您可以使用pathinfo函数进行以下操作:

$file = "a.jpg";
var_dump(pathinfo($file));

将有一个扩展密钥。但我建议您不仅要验证文件的扩展名,还要验证mime类型!

我发现了这个方法:

public static function is_image($image_path)
{
    if (!$f = fopen($image_path, 'rb')) {
        return false;
    }
    $data = fread($f, 8);
    fclose($f);
    $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;
}

你觉得怎么样?thx