Ciao a tutti, sto diventando matto per aggiungere dei controlli durante l'upload di immagini..
Sto utilizzando lo script UberUploadCropper preso da:
http://trentrichardson.com/2011/12/2...crop-no-flash/

Lo script funziona molto bene,ma purtroppo permette anche il caricamento di shell... vorrei aggiungere quindi il controllo del mime type ma la funzione in oggetto non mi funziona e mi riporta errore:

codice:
Warning:  getimagesize(/../../_userAccountFolder/311/fiore.bmp) [function.getimagesize]: failed to open stream: No such file or directory in E:\xampp\htdocs\_mySite\_impostazioni\scripts\fileuploader\fileuploader.php on line 88

{'error':'error in uploading'}
Vi posto la classe dell'uploader con il relativo controllo da me inserito:
Codice PHP:
 Handle file uploads via XMLHttpRequest
 
*/
class 
qqUploadedFileXhr {
    
/**
     * Save the file to the specified path
     * @return boolean TRUE on success
     */
    
function save($path) {    
        
$input fopen("php://input""r");
        
$temp tmpfile();
        
$realSize stream_copy_to_stream($input$temp);
        
fclose($input);
        
        if (
$realSize != $this->getSize()){            
            return 
false;
        }
        
        
$target fopen($path"w");        
        
fseek($temp0SEEK_SET);
        
stream_copy_to_stream($temp$target);
        
fclose($target);
        
        return 
true;
    }
    function 
getName() {
        return 
$_GET['qqfile'];
    }
    function 
getSize() {
        if (isset(
$_SERVER["CONTENT_LENGTH"])){
            return (int)
$_SERVER["CONTENT_LENGTH"];            
        } else {
            throw new 
Exception('Getting content length is not supported.');
        }      
    }   
}

/**
 * Handle file uploads via regular form post (uses the $_FILES array)
 */
class qqUploadedFileForm {  
    
/**
     * Save the file to the specified path
     * @return boolean TRUE on success
     */
    
function save($path) {
        if(!
move_uploaded_file($_FILES['qqfile']['tmp_name'], $path)){
            return 
false;
        }
        return 
true;
    }
    function 
getName() {
        return 
$_FILES['qqfile']['name'];
    }
    function 
getSize() {
        return 
$_FILES['qqfile']['size'];
    }
}

class 
qqFileUploader {
    private 
$allowedExtensions = array();
    private 
$sizeLimit 10485760;
    private 
$file;

    function 
__construct(array $allowedExtensions = array(), $sizeLimit 10485760){        
        
$allowedExtensions array_map("strtolower"$allowedExtensions);
            
        
$this->allowedExtensions $allowedExtensions;        
        
$this->sizeLimit $sizeLimit;
        
        
$this->checkServerSettings();    
        
        if (isset(
$_GET['qqfile'])) {
            
$this->file = new qqUploadedFileXhr();
        } elseif (isset(
$_FILES['qqfile'])) {
            
$this->file = new qqUploadedFileForm();
        } else {
            
$this->file false
        }
        
########## INIZIO CONTROLLO INSERITO DA ME 
        
$imgN $this->file->getName();
        
$pathinfo pathinfo($this->file->getName());
        
$myPath $pathinfo['dirname'];
        
$theimgPath '/../../_userAccountFolder/311/'.$imgN;
        
$imageInfo getimagesize("$theimgPath");   
        if(
$imageInfo['mime'] != 'image/gif' && $imageInfo['mime'] != 'image/jpg' && $imageInfo['mime'] != 'image/bmp'&& $imageInfo['mime'] != 'image/png'){   
             die(
"{'error':'error in uploading'}");       
        }        
########## FINE CONTROLLO INSERITO DA ME 
    
}
    
    private function 
checkServerSettings(){        
        
$postSize $this->toBytes(ini_get('post_max_size'));
        
$uploadSize $this->toBytes(ini_get('upload_max_filesize'));        
        
        if (
$postSize $this->sizeLimit || $uploadSize $this->sizeLimit){
            
$size max(1$this->sizeLimit 1024 1024) . 'M';             
            die(
"{'error':'increase post_max_size and upload_max_filesize to $size'}");    
        }        
    }
        
    
    private function 
toBytes($str){
        
$val trim($str);
        
$last strtolower($str[strlen($str)-1]);
        switch(
$last) {
            case 
'g'$val *= 1024;
            case 
'm'$val *= 1024;
            case 
'k'$val *= 1024;        
        }
        return 
$val;
    }
    
    
/**
     * Returns array('success'=>true) or array('error'=>'error message')
     */
    
function handleUpload($uploadDirectory$replaceOldFile FALSE$filename=''){
        if (!
is_writable($uploadDirectory)){
            return array(
'error' => "Server error. Upload directory isn't writable.");
        }
        
        if (!
$this->file){
            return array(
'error' => 'No files were uploaded.');
        }
        
        
$size $this->file->getSize();
        
        if (
$size == 0) {
            return array(
'error' => 'File is empty');
        }
        
        if (
$size $this->sizeLimit) {
            return array(
'error' => 'File is too large');
        }
        
        
$pathinfo pathinfo($this->file->getName());
        if(
$filename == ''// 2011-12-09: Allow passing in a custom file name
            
$filename $pathinfo['filename'];
        
//$filename = $pathinfo['filename'];
        //$filename = md5(uniqid());
        
$ext $pathinfo['extension'];

        if(
$this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)){
            
$these implode(', '$this->allowedExtensions);
            return array(
'error' => 'File has an invalid extension, it should be one of '$these '.');
        }
                
        if(!
$replaceOldFile){
            
/// don't overwrite previous files that were uploaded
            
while (file_exists($uploadDirectory $filename '.' $ext)) {
                
$filename .= rand(1099);
            }
        }
        
        if (
$this->file->save($uploadDirectory $filename '.' $ext)){
            return array(
'success'=>true'filename'=>($filename.'.'.$ext), 'originalFilename'=>($pathinfo['filename'].'.'.$ext)); // 2011-12-09: Pass back the filename
        
} else {
            return array(
'error'=> 'Could not save uploaded file.' .
                
'The upload was cancelled, or server error encountered');
        }
        
    }    

Vi ringrazio anticipatamente!