Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1583 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Proteger un fomulaire d'upload d'image?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Proteger un fomulaire d'upload d'image?

n°1741149
corsichris
Posté le 04-06-2008 à 09:31:23  profilanswer
 

bonjour,
 
voila mon probleme;
 
je suis novice en programation PHP,
j'ai recupéré un script d'agenda sur internet que j'ai bien installé, mais je subissais des attaques de hackers, et je me suis apercu qu'en fait il passait par ce script d'agenda par le  formulaire d'upload d'image , ou l'on peut envoyer toute sorte de fichier.
Donc je voudrais tout simplement restreindre le format de fichier d'envoi à un "jpg ou gif"
 
Je vous joint ci dessous donc le script d'upload et le formulaire html,
si quelqu'un pouvait m'aider en me completant ce code pour palier à ce probleme
merci d'avance pour votre aide...
 
 
Formulaire d'envoi
---------------------------------------------------------------------------------------------
                        <td width="75%" height="29" valign="top"> <br>
                          <input type="image" border="0" name="imageField222" src="../images/carret0.gif" width="18" height="18" onClick="OnSubmit('upload')">
                          Upload image<br>
                          <br>
                          <input type="image" border="0" name="imageField2222" src="../images/logodel2.gif" width="15" height="15" onClick="OnSubmit('removeimage')">
                          Remove image </td>
------------------------------------------------------------------------------------------------
 
 
scipt d'upload
------------------------------------------------------------------------------------------
<?
 
function upload_image($idevent , $uploadedfile , $uploadedfile_name)
{
 // upload an image for the event
 global $CFG;
 debug("image upload : $uploadedfile_name" );
  $uploadedfilename = "";
  if(isset($uploadedfile) && $uploadedfile<>"none" && $uploadedfile_name != "" )
  {
   $path   = basename($uploadedfile_name); // does not use pathinfo function for compatibility with PHP3
   $pathex = explode("." , $path);
   $uploadedfilename = generate_filename("../".$CFG->image_event_dir , $pathex[1]);
 
 
 
   if($uploadedfilename["filename"] <> "" )
   {
 
    debug("uploadedfilename = ".$uploadedfilename["path"]);
    if(!copy($uploadedfile,$uploadedfilename["path"]))//"$CFG->image_event_dir/".$uploadedfilename))
     {
      echo("Sorry, Your file failed to upload.<br>" );
       echo("Either your file doesn't exist or it was too large." );
       return "";
     }
     else
    db_query("UPDATE $CFG->table_event SET image = '$uploadedfilename[filename]' WHERE id=$idevent" );
  }
  else
     echo("Sorry, Your file failed to upload.(filename generation failed)<br>" );
 }
   return $uploadedfilename;
}
?>
---------------------------------------------------------------------------------------------------------------

mood
Publicité
Posté le 04-06-2008 à 09:31:23  profilanswer
 

n°1741160
ionik
Posté le 04-06-2008 à 09:56:55  profilanswer
 

tu met une condition sur le $uploadedfile_name
 
if (strpos('.gif' , $uploadedfile_name) || strpos ('.jpg' , $uploadedfile_name) {
 // le deroulement de ta fonction
}
 
sinon tu peut toujours passer par un test sur le type mime


---------------
Recette cookeo Recette de cuisine
n°1741162
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 04-06-2008 à 09:59:21  profilanswer
 

le type mime sera mieux, autrement on prend un mp3, on la renomme en jpg et on contourne le système ...
 
dans ton traitement de formilaure, mets un print_r($_FILES) : tu verras qu'il t'apprendra plein de choses sur le fichier téléchargé, notamment son type mime.


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1741170
corsichris
Posté le 04-06-2008 à 10:07:03  profilanswer
 

merci pour vos reponses,
j'ai bien compris,je pense oui que verifie le type mine est le mieux, mais comment faire ensuite pour restreinte pour un jpg ou gif ?
désolé  je suis novice en php,
peut tu m'ecrire le code qu'il faudrait rajouter et à quel endroit , s'il te plait?

n°1741195
flo850
moi je
Posté le 04-06-2008 à 10:38:44  profilanswer
 

pour verifier si tu as une image  
http://fr.php.net/manual/fr/functi [...] getype.php


---------------

n°1741212
corsichris
Posté le 04-06-2008 à 11:04:21  profilanswer
 

merci, mais comment et ou integrer tout çà sur mon code?

n°1741233
Profil sup​primé
Posté le 04-06-2008 à 11:33:59  answer
 

ionik a écrit :

tu met une condition sur le $uploadedfile_name

Code :
  1. if (strpos('.gif' , $uploadedfile_name) || strpos ('.jpg' , $uploadedfile_name)) {
  2. // le deroulement de ta fonction
  3. }


 
sinon tu peut toujours passer par un test sur le type mime


 
Non, ce test n'est pas sur du tout, car un fichier dont le nom est

Code :
  1. fichier.jpg.php

passe ce test.
 

Citation :

merci, mais comment et ou integrer tout çà sur mon code?


 

Code :
  1. <?php
  2. if(exif_imagetype($uploadedfile) == 1 or exif_imagetype($uploadedfile) == 2) {
  3.     echo 'Image jpeg ou gif';
  4.     //suite de l'upload
  5. }
  6. else
  7. {
  8.     die('Fichier incorrect');
  9. }
  10. ?>


Message édité par Profil supprimé le 04-06-2008 à 14:23:27
n°1741297
corsichris
Posté le 04-06-2008 à 12:25:34  profilanswer
 

merci pour cette reponse,
j'ai essayé mais çà ne fonctionne pas, j'ai du mal inseré le code au bon endroit, pourrais tu me dire ou exactement faut il l'inseré?
merci bcp pour ton aide

n°1741318
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 04-06-2008 à 12:53:20  profilanswer
 

lucas => pourquoi != ?
exif_imagetype est censé renvoyer 1 ou 2, justement, pour ces 2 types ... à moins que je n'aie mal compris la doc. (je présume que tu voulais inverser l'action ?)


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1741359
Profil sup​primé
Posté le 04-06-2008 à 14:22:57  answer
 

oups, oui j'ai inversé l'action mea culpa.
J'edite mon post.
Je me suis aussi permis de tout passer en simples quotes sauf la requete. ;)  
Code complet (pas testé, sans doute pas mal d'erreurs à corriger)

Code :
  1. <?php
  2. function upload_image($idevent , $uploadedfile , $uploadedfile_name)
  3. {
  4.     // upload an image for the event
  5.     global $CFG;
  6.     debug('image upload : '.$uploadedfile_name );
  7.     $uploadedfilename = '';
  8.     if(isset($uploadedfile) && $uploadedfile<>'none' && $uploadedfile_name != '' )
  9.     {
  10.         $path   = basename($uploadedfile_name); // does not use pathinfo function for compatibility     with PHP3
  11.         $pathex = explode('.' , $path);
  12.         $uploadedfilename = generate_filename('../'.$CFG->image_event_dir , $pathex[1]);
  13.         if($uploadedfilename['filename'] <> '' )
  14.           {
  15.             debug('uploadedfilename = '.$uploadedfilename["path"]);
  16.             if(exif_imagetype($uploadedfile) == 1 or exif_imagetype($uploadedfile) == 2) {
  17.                 if(!copy($uploadedfile,$uploadedfilename['path']))
  18.                 {
  19.                       echo('Sorry, Your file failed to upload.<br>' );
  20.                       echo('Either your file doesn\'t exist or it was too large.' );
  21.                       return '';
  22.                 }
  23.                 else
  24.                 {
  25.                       db_query("UPDATE $CFG->table_event SET image = '$uploadedfilename[filename]' WHERE id=$idevent" );
  26.                 }
  27.             }
  28.             else
  29.             {
  30.                 echo('Fichier incorrect : fichier JPEG ou GIF seulement');
  31.             }
  32.         }
  33.    }
  34.     else
  35.     {
  36.        echo('Sorry, Your file failed to upload.(filename generation failed)<br>' );
  37.     }
  38.   return $uploadedfilename;
  39. }
  40. ?>


Message édité par Profil supprimé le 04-06-2008 à 14:40:27
mood
Publicité
Posté le 04-06-2008 à 14:22:57  profilanswer
 

n°1741361
sielfried
Posté le 04-06-2008 à 14:25:11  profilanswer
 

getimagesize marche pas trop mal non plus pour vérifier qu'il s'agit bien d'une image (mais pas sûr que ce soit fiable à 100%)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1741531
corsichris
Posté le 04-06-2008 à 19:32:36  profilanswer
 

çà a l'air de fonctionner merci beaucoup , est ce que q'avec ce code y aurait encore des possibilité de contourner ce code?

n°1742221
Profil sup​primé
Posté le 05-06-2008 à 20:25:57  answer
 

tu rajoutes le test getimagesize() si tu veux mais à priori pas de soucis.

n°1742348
corsichris
Posté le 06-06-2008 à 09:32:41  profilanswer
 

bonjour,
 
je suis encore la et dépité , car malgré la correction du code ci dessous, les hackers arrivent encore a me déposer
un fichier .php à partir du formulaire .
 
pourtant lorsque je fais un essai moi tout ce passe bien et seul les fichiers jpg ou gif son acceptés,?
 
si quelqu un pourrait m'aider à palier à ce probleme et me corriger le code ci dessous ( car tres novice en php )
 
merci bcp d'avance pour votre soutien
 
 
 

n°1742649
Profil sup​primé
Posté le 06-06-2008 à 17:50:45  answer
 

Oui, mais est-ce que l'extension est .php ? si ce n'est pas le cas, il n'y a pas trop de risque (sauf si php est mal configuré)
utilise getimagesize().
Code :

Code :
  1. <?php
  2. function upload_image($idevent , $uploadedfile , $uploadedfile_name)
  3. {
  4.     // upload an image for the event
  5.     global $CFG;
  6.     debug('image upload : '.$uploadedfile_name );
  7.     $uploadedfilename = '';
  8.     if(isset($uploadedfile) && $uploadedfile<>'none' && $uploadedfile_name != '' )
  9.     {
  10.         $path   = basename($uploadedfile_name); // does not use pathinfo function for compatibility     with PHP3
  11.         $pathex = explode('.' , $path);
  12.         $uploadedfilename = generate_filename('../'.$CFG->image_event_dir , $pathex[1]);
  13.         if($uploadedfilename['filename'] <> '' )
  14.           {
  15.             debug('uploadedfilename = '.$uploadedfilename["path"]);
  16.             
  17.             $taille=getimagesize($uploadedfile);
  18.             define('LONGMIN',10);
  19.             define('HAUTMIN',10);
  20.             
  21.             if($taille[0]>LONGMIN && $taille[1]>HAUTMIN)
  22.             {
  23.                 if(exif_imagetype($uploadedfile) == 1 or exif_imagetype($uploadedfile) == 2) {
  24.                     if(!copy($uploadedfile,$uploadedfilename['path']))
  25.                     {
  26.                           echo('Sorry, Your file failed to upload.<br>' );
  27.                           echo('Either your file doesn\'t exist or it was too large.' );
  28.                           return '';
  29.                     }
  30.                     else
  31.                     {
  32.                           db_query("UPDATE $CFG->table_event SET image = '$uploadedfilename[filename]' WHERE id=$idevent" );
  33.                     }
  34.                 }
  35.                 else
  36.                 {
  37.                     echo('Fichier incorrect : fichier JPEG ou GIF seulement');
  38.                 }
  39.             }
  40.             else
  41.             {
  42.                 echo('Hauteur et Longueur insuffisante.');
  43.             }
  44.         }
  45.    }
  46.     else
  47.     {
  48.        echo('Sorry, Your file failed to upload.(filename generation failed)<br>' );
  49.     }
  50.   return $uploadedfilename;
  51. }
  52. ?>


Message édité par Profil supprimé le 08-06-2008 à 12:11:44

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Proteger un fomulaire d'upload d'image?

 

Sujets relatifs
[PHP] Découper une imageloadMovie pour une image qui marche pas en ligne
afficher une image en passant sur une autre imageApplet/Flash pour scroller une image
[Résolu] Mise à jour d'un JLabel contenant une image[AS3] Proposer de dl une image ou musique d'un DVD
[C#] exception NullReferenceExc lors de changement d'image de fondGénération image au format PDF Haute Def CMJN
Titres avec image fond étirableRécupérer une image d'une RichTextCtrl
Plus de sujets relatifs à : Proteger un fomulaire d'upload d'image?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR