upload d'image

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : upload d'image

par Mimos@ » 27 nov. 2006, 19:37

Bon cette fois le sujet est réellement résolu.
Merci à tous pour votre aide.

par DocType » 27 nov. 2006, 19:34

Ah ok, je pensai fallait faire un truc compliqué.
Oui j'avais regarder la video, j'ai même essayer....
^^ non, un truc "simple" qui permet de limiter les actions des visiteurs est plsu que suffisant (c'est même LA méthode) :wink:
Bon code m'sieur :wink:

par Mimos@ » 27 nov. 2006, 19:29

Ah ok, je pensai fallait faire un truc compliqué.
Oui j'avais regarder la video, j'ai même essayer....

par DocType » 27 nov. 2006, 19:27

Enfin au pire se n'est pas grave, la sécurité c'est juste un petit plus pour moi, j'ai déjà ma galerie qui marche.
Ca je ne veu même pas l'entendre ! La securité c'est ce qui passe avant tout !

As-tu regardé la vidéo ? Si oui, tu as vu que le mec controlait la page comme il voulait, c'est que du html ! Donc pour éviter des surprises du genre, on contrôle à l'arrivée que le répertoire selectionnée correspond bien à un repertoire que tu as définis. Pour ça tu compares la variable du formulaire à celles possibles. Si c'est faux, tu arrête le script, si c'est une bonne variable, tu peux continuer :wink:

par Mimos@ » 27 nov. 2006, 19:20

 $file_upload2=$tempdonne.$extension_upload;
En faite il fallait pas que je mets sa, mais :
$file_upload2=$tempnames.'.'.$extension_upload;
sinon sa me met 01jpg au lieu de 01.jpg

Il me reste une chose et je vous embête plus :
Pas du tout compris comment sécuriser la liste déroulante....

Enfin au pire se n'est pas grave, la sécurité c'est juste un petit plus pour moi, j'ai déjà ma galerie qui marche.

par DocType » 26 nov. 2006, 23:13

Je ne comprend pas ton fonctionnement...
Il ne faudrait pas renommer les images actuelles (enfin, le prévoir) mais surtout les uploader déjà renommées :roll:
Enfin, je serai trop j'apprendrai la concaténation, car apparemment tu n'as pas compris. Fab t'avait expliqué et par la même résolu ton soucis et ta seconde erreur est exactement la même :roll:

par Spols » 26 nov. 2006, 20:42

essaye ca
$extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
 $extension_upload = substr(  strrchr($_FILES['photo']['name'], '.')  ,1);
 $retour = mysql_query("SELECT COUNT(*) AS id FROM test");
 $tempdonne = mysql_fetch_array($retour);
 $file_upload2=$tempdonne.$extension_upload;
 rename($dossier.'/'.$file_upload, $dossier.'/'.$file_upload2);
 mysql_close(); // Déconnexion de MySQL 
et apparement file_upload2 est un tableau, et pas une chaine de caractère

par Mimos@ » 26 nov. 2006, 18:59

J'ai tester ceci pour renommer l'image uploader.
 $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
 $extension_upload = substr(  strrchr($_FILES['photo']['name'], '.')  ,1);
 $retour = mysql_query("SELECT COUNT(*) AS id FROM test");
 $tempdonne = mysql_fetch_array($retour);
 $file_upload2=$tempdonne.$extension_upload;
 rename("$dossier.'/'.$file_upload", "$dossier.'/'.$file_upload2");
 mysql_close(); // Déconnexion de MySQL
sa me renvoie cette erreur :
Warning: rename(/mnt/112/free.fr/b/c/snshinobi/images/dbz/.'/'.logo4.png,/mnt/112/free.fr/b/c/snshinobi/images/dbz/.'/'.Array) [function.rename]: No such file or directory in /mnt/112/free.fr/b/c/snshinobi/test.php on line 25

par DocType » 26 nov. 2006, 11:34

donné sur le forum, on te montre une injection sql et le détournement de formulaire http://www.youtube.com/watch?v=jMQ2wdOmMIA

par DocType » 26 nov. 2006, 01:41

un truc marrant => passer la chaine en md5() et lenregistrer en bdd. ou alors renommer en fonction de son id, un truc du genre. pour renommer il suffit juste de sélectionner l'elmplacement du fichier final a ta convenance :wink:
move_uploaded_file($_FILES['photo']['tmp_name'], $dossier.'/'.$file_upload); 
la dedans, suffit de modifier $dossier pour le chemin et $file_upload pour son nom de fichier et extension :wink:

En fin, un htmlentities te servira à rien ! Il faut fixer les dossiers de destination, donc les figer dans la page de traitement
Au pire tu fais un if squr chaquerepertoire possible, et si c'est un autre nom tu ejecte le type. :wink:

par Mimos@ » 25 nov. 2006, 15:28

D'accord, mais comment faire alors ? en utilisant htmlentities ?
Je suis vraiment débutant en php, j'ai fais se script a partir plus plusieurs tuto et j'ai pris se que je voulais pour faire mon script. je comprend la plupart des choses car je fais du c++ et la syntaxe est relativement la même. Mais je suis encore beaucoup dépasser par le php.
Comment faire pour renommer un fichier. dans la logique je sais le faire mais après avec le php....
Il faut prendre $_FILES['photo']['name'] puis enlever l'extension, renommer et rajouter l'extension je pense. Mais je sais pas comment faire pour que le fichier sa nomme 01.extension puis 02.extension....
J'ai créé une BDD comme sa je peux savoir comment a était nommé la dernière image uploader. il faut donc lire la valeur, incrémentée de +1.
Si vous avez quelque idée et vous pouvez me guidé se serait gentils, merci

par DocType » 24 nov. 2006, 23:29

Ce n'est parce que ta liste déroulante est correcte qu'on ne peut pas la détourner ! Il faut se mettre dans la tête que tout ce qui est passé par formulaire, url ou cookie est non securisé.

Imagine mon script hebergé sur mon site ou totu simplement sur mon pc...

Code : Tout sélectionner

<form method="post" action="http://www.tonurl.com/upload.php" enctype="multipart/form-data"> input type="file" name="photo" id="photo" /></p> <select name="manga"> <option value="images">Dragon-ball</option> </select> <input type="submit" value="Envoyer" /> </form>
Si je me trompe pas avec ça je fous un bordel phénoménal :roll:

et effectivement il serait judicieux de renommer les fichiers (en tout cas moi je le fais par défaut)

par Mimos@ » 24 nov. 2006, 21:01

Bon voila, j'ai franchi le pas, me suis inscrit.
Il est vrai que niveau sécurité j'ai vraiment du mal. et si quelqu'un avait quelque solution.
N'en serait-elle pas une que de renommer le fichier à l'upload ? de plus se serait plus simple pour s'y retrouver en les nomment par exemple, 01.jpg, 02.jpg, 03.png.......
<?php
if(isset($_FILES['photo']) && isset($_POST['manga']))
{
  $lequel = $_POST['manga']; 
  $dossier = '/mnt/112/free.fr/b/c/snshinobi/images/'.$lequel.'/';
  $dir_mini = '/mnt/112/free.fr/b/c/snshinobi/images/mini/'.$lequel.'/';
  $fichier = $_FILES['photo']['name']; 
  $taille_fichier = $FILES['photo']['size'];
  
  if(substr($fichier, -3)=="jpg" || substr($fichier, -3)=="gif" || substr($fichier, -3)=="png")
  {
    if($taille_fichier <= 4194304)
    { 
      if (is_file('/mnt/112/free.fr/b/c/snshinobi/images/'.$lequel.'/'.$_FILES['photo']['name'])) $file_upload = '_'.$_FILES['photo']['name'];
      else $file_upload = $_FILES['photo']['name'];
      if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier.'/'.$file_upload))
      {
        echo 'Upload réussi';
		
		
		$largeurDestination = 150;
        $hauteurDestination = 150;
	    $miniature = "mini_$fichierSource";
        If (substr($fichier, -3)=="gif")
	    {
          // ceci est une image GIF
	      $image1=imagecreatefromgif($dossier.'/'.$file_upload);
	      $image2=imagecreatetruecolor($largeurDestination, $hauteurDestination);
          $largeurSource = imagesx($image1);
          $hauteurSource = imagesy($image1);
	      imagecopyresized($image2, $image1, 0, 0, 0, 0, $largeurDestination-(2*8), $hauteurDestination-(2*8),   	$largeurSource, $hauteurSource);
	      imagegif($image2, $dir_mini.'/'.$file_upload);
		  echo "<br />Image miniature générée: $miniature";
    	}
    	elseif (substr($fichier, -3)=="jpg")
	    {
	      // ceci est une image JPG
	      $image1=imagecreatefromjpeg($dossier.'/'.$file_upload);
	      $image2=imagecreatetruecolor($largeurDestination, $hauteurDestination);
          $largeurSource = imagesx($image1);
          $hauteurSource = imagesy($image1);
    	  imagecopyresized($image2, $image1, 0, 0, 0, 0, $largeurDestination-(2*8), $hauteurDestination-(2*8),   		$largeurSource, $hauteurSource);
    	  imagejpeg($image2, $dir_mini.'/'.$file_upload);
		  echo "<br />Image miniature générée: $miniature";
    	}
    	elseif (substr($fichier, -3)=="png")
	    {
    	  // ceci est une image png
	      $image1=imagecreatefrompng($dossier.'/'.$file_upload);
	      $image2=imagecreatetruecolor($largeurDestination, $hauteurDestination);
          $largeurSource = imagesx($image1);
          $hauteurSource = imagesy($image1);
	      imagecopyresized($image2, $image1, 0, 0, 0, 0, $largeurDestination-(2*8), $hauteurDestination-(2*8),   	$largeurSource, $hauteurSource);
	      imagepng($image2, $dir_mini.'/'.$file_upload);
          echo "<br />Image miniature générée: $miniature";	   
    	}
		
		
      }
      else
      {
        echo 'Erreur dans upload';
      }
   }
   else
   {
     echo 'l image est trop grande. taille maxi 4mo';
   }
 }
 else
 {
   echo 'le fichier n\'est pas une image';
 }
}
?>
faudrait mieux qu'il fasse un switch pour manga, on peut facilement détourner le dossier sinon
un switch pour manga ? je le passe par une liste déroulante.[/code]

par fab » 23 nov. 2006, 23:29

Faudra aussi penser a t'inscrire ça évitera aux modérateurs d'intervenir pour mettre le tag résolu :p
De plus si tu as questions sur la sécurité tu es bienvenue ici c'est un sujet ou mes compétences sont limités mais cela reste tres intéressant et il y a du monde qualifié pour répondre.

par Mimos@ » 23 nov. 2006, 23:23

OK merci pour tout. Je vais modifier cela.
On peux mettre mon sujet résolu.