文件上传 - PHP 中的扩展验证


file upload - Extension validation in php

我一直在尝试并重试此代码,试图获取文件扩展名并有条件地检查它,但由于文件在流中的位置,我看不到$ext的内容。

谁能指出这里出了什么问题?它只是在操作 dropzone.js 的上传文件。

if (!empty($_FILES)) {
    $tempFile = $_FILES['file']['tmp_name'];          //3             
    $targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds;  //4
    $targetFile =  $targetPath. $_FILES['file']['name'];  //5
    $ext = end(explode(".", $_FILES['file']['tmp_name']));
    if(filesize($tempFile) < 6000000 and $ext == "png"){
        move_uploaded_file($tempFile,$targetFile); //6
    }
}

您正在使用tmp_name变量来获取扩展名,该扩展名将始终为您提供扩展名.tmp文件。

代替

$ext = end(explode(".", $_FILES['file']['tmp_name']));

使用这个 :

$ext = end(explode(".", $_FILES['file']['name']));

更新 :- 但最好通过检查其 mime 时间来验证文件类型(如 @castis 所说),因为某些用户可能会使用某些扩展名重命名其文件并上传它。

下面是验证文本文件的代码示例,可以使用类似的方法来验证图像类型。

$file_type =  mime_content_type($_FILES['img']['tmp_name']);
if($file_type == 'text/plain'){
    echo "file type is text";
}
?>
<form action="#" method="post" enctype="multipart/form-data">
  <input type="file" name="img">
  <input type="submit" value="Submit">
</form>