这个正则表达式容易受到任意文件上传的影响

时间:2013-08-15 20:50:37

标签: php upload

我正忙于编写PHP文件,以便安全地上传图像,例如.jpg,.jpeg,.png,.bmp和.gif

以下是代码:

$realname = $_FILES['userfile']['name'];

if(!preg_match("/(\.jpg|\.png|\.gif|\.bmp|\.jpeg)$/i",$realname)) {
          die();
}

有没有办法绕过此检查才能上传.php文件?我听说过file.php%00.jpg技巧,但这是安全的。有谁知道其他任何方法?或者上面的代码安全吗?

1 个答案:

答案 0 :(得分:0)

回答这个问题:是的。

但是你很幸运,我刚写了这个:

function checkImageFileIsImage($filepath) {
    $type = exif_imagetype($filepath);
    $allowedTypes = array(
        1,  // [] gif
        2,  // [] jpg
        3   // [] png
    );

    if (!in_array($type, $allowedTypes)) {
        return false;
    }
    return true;
}

请查看http://php.net/manual/en/function.exif-imagetype.php了解更多文件类型。