2010-06-25 8 views
-1

J'ai fait le même formulaire de téléchargement pour le téléchargement de photos comme here. Est-ce tout ce que je peux faire pour protéger mon site web ou dois-je ajouter quelque chose? Merci beaucoup.Est-ce tout ce que je peux faire pour rendre ce formulaire de téléchargement "sûr"?

+2

Pourquoi continuez-vous à demander une variation de la même question? http://stackoverflow.com/questions/3114147/100-safe-photo-upload-script –

+0

Ce n'est pas la même chose. –

Répondre

3

Je dirais que non. Il y a des contrôles là-dedans pour restreindre le type du fichier en cours de téléchargement:

if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/pjpeg")) 
.... 

Ce « type » est fourni par le navigateur et ne peut être invoqué pour des raisons de sécurité. Quelqu'un pourrait facilement pirater quelque chose ensemble qui a envoyé un fichier exécutable avec un type de "image/gif" et le script serait heureux de l'accepter.

Une meilleure vérification serait d'utiliser quelque chose comme getimagesize ou l'une des autres fonctions GD pour vérifier qu'il s'agit bien d'une image.

+0

Pouvez-vous me donner un exemple de fichier dont le type est .gif, .jpeg ou .jpg et ce n'est pas une image? Merci, parce que je suis très curieux. –

+1

@hey, bien sûr - faites un clic droit sur un fichier exe, choisissez renommer, et changez le "exe" en "gif" :) –

+0

Je pense que vous avez tort, car il ne me permet toujours pas de télécharger le fichier. Essayez-vous. Ou je fais quelque chose de mal. –

0

i ont cette ancienne fonction que je continue à utiliser pour créer une image unique:

<? 
    $portal_name = 'yoursite name that will be written as watermark'; 

    /** 
    * 
    * @param $only_file_name if isset, returns two files as array with paths to folder where they are saved 
    * @param $type_action if isset crop, crops the images 
    * @param $t_h = thumbnail height 
    * @param $t_w = thumbnail width 
    * @param $n_h = big height 
    * @param $n_w = big width 
    * @param $path1 
    * @param $path2 
    * @param $param_file_name = name your file, e.g. rand(0,50); or better time(); 
    * @param $file_object = the $_FILES['filename']; 
    * @param $file_size = file size in kb 
    * @param $thumb = shall i crop the thumbnail ? 
    * @param $watermarkon = use watermark or not 
    */ 


    function Make_Single_Picture($only_file_name="on",$type_action="crop", $t_h, $t_w, $n_h, $n_w, $path1, $path2, $param_file_name, $file_object, $file_size, $thumb="crop", $watermarkon="yes") { 
     global $portal_name; 



     $Picture=$file_object; 



     $errors=0; 


     $image =$Picture["name"]; 
     $uploadedfile = $Picture['tmp_name']; 

     $watermark = imagecreatefrompng("watermark.png"); 
     imagealphablending($watermark, true); 

     $watermark_width = imagesx($watermark); 
     $watermark_height = imagesy($watermark); 



     if ($image) 
     { 
      $filename = stripslashes($Picture['name']); 
      $extension = getExtension($filename); 
      $extension = strtolower($extension); 
      if (($extension != "jpg") && ($extension != "jpeg") 

      && ($extension != "png")) 
      { 

       return FALSE; 

       $errors=1; 
      } 
      else 
      { 
       $size=filesize($Picture['tmp_name']); 

       if ($size > $file_size*1024) 
       { 
        return FALSE; 

        $errors=1; 
       } 

       if($extension=="jpg" || $extension=="jpeg") 
       { 
        $uploadedfile = $Picture['tmp_name']; 
        $src = imagecreatefromjpeg($uploadedfile); 
       } 
       else if($extension=="png" || $extension=="gif") 
       { 
        $uploadedfile = $Picture['tmp_name']; 
        $src = imagecreatefrompng($uploadedfile); 
       } 
       else 
       { 
        $src = imagecreatefromgif($uploadedfile); 
       } 

       list($width,$height)=getimagesize($uploadedfile); 

       if ($type_action=="crop") { 
        $newwidth=$n_w; 
        $newheight=$n_h; 
        if ($width<$n_w) { 
         $newwidth=$width; 
        } 
        if ($width<$n_h) { 
         $newheight=$height; 
        } 
        $tmp=imagecreatetruecolor($newwidth,$newheight); 

       } 
       else { 

        $newwidth=$n_w; 
        $newheight=($height/$width)*$newwidth; 
        if ($width<$n_w) { 
         $newwidth=$width; 
        } 
        if ($width<$n_h) { 
         $newheight=$height; 
        } 
        $tmp=imagecreatetruecolor($newwidth,$newheight); 


       } 


       if ($thumb=="crop") { 
        $newwidth1=$t_w; 
        $newheight1=$t_h; 
        $tmp1=imagecreatetruecolor($newwidth1,$newheight1); 
       } 
       else {$newwidth1=$t_w; 
       $newheight1= ($height/$width)*$newwidth1; 
       $tmp1=imagecreatetruecolor($newwidth1,$newheight1);} 


       imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight, $width,$height); 
       $dest_x = ($newwidth - $watermark_width) + 20; 
       $dest_y = ($newheight - $watermark_height) + 35; 
       if ($watermarkon=="yes") { 
       $color_of_the_text = imagecolorallocate($tmp, 255, 255, 255); 

       // path to the font that you want to use when printing watermark 
       $font = "txt_cache/GILLUBCD.TTF"; 
       imagettftext($tmp, 16, 0, $dest_x, $dest_y, $color_of_the_text, $font, $portal_name); 
       } 
       imagecopyresampled($tmp1,$src,0,0,0,0,$newwidth1,$newheight1, $width, $height); 
       $time_and_id = ''.$param_file_name.'_'.$kolko.''; 
       $image_name=$time_and_id.'.'.$extension; 

       $filename = "$path1". $image_name; 
       $filename1 = "$path2". $image_name; 

       imagejpeg($tmp,$filename,100); 
       imagejpeg($tmp1,$filename1,100); 

       imagedestroy($src); 
       imagedestroy($tmp); 
       imagedestroy($tmp1); 
       imagedestroy($watermark); 

       if ($only_file_name=="on") { 
        return array('huge'=>$image_name, 'thumb'=>$image_name); 

       } else { 
        return array('huge'=>$filename, 'thumb'=>$filename1); 
       } 

      } 
     } 



    } 


    /** 
* 
* @param entire array of files $files to be used BEFORE foreach 
* @return will return a valid array of files. 
* @author vertazzar 
*/ 
function fixFilesArray(&$files) 
{ 
    $names = array('name' => 1, 'type' => 1, 'tmp_name' => 1, 'error' => 1, 'size' => 1); 

    foreach ($files as $key => $part) { 
     $key = (string) $key; 
     if (isset($names[$key]) && is_array($part)) { 
      foreach ($part as $position => $value) { 
       $files[$position][$key] = $value; 
      } 

      unset($files[$key]); 
     } 
    } 
} 


    function getExtension($str) { 

     $i = strrpos($str,"."); 
     if (!$i) { return ""; } 

     $l = strlen($str) - $i; 
     $ext = substr($str,$i+1,$l); 
     return $ext; 
    } 

    ?> 

utilisation:

$files = Make_Single_Picture('off', 'crop', 200,100,800,600,'path/big/', 'path/small', time(), $_FILES['filename'], 1000, 'crop', 'yes'); 
<? echo $files['huge']; echo $files['thumb']; ?> 

REMARQUE: cette fonction/code est légèrement modifié de la version originale, parce que Les variables étaient sur d'autres langages, donc vous comprenez mieux ce qu'est ce que vous voulez, donc vous pourriez vouloir tester d'abord.

Questions connexes