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

时间:2014-10-29 13:56:02

标签: php security upload

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

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用pathinfo功能,如:

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

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

答案 1 :(得分:0)

我找到了这个方法:

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