Membres


Pas encore membre ?
inscrivez-vous ici

Connexion :
Login
Code
Mot de passe perdu ?
Liste des membres

Upload PHP - Cours php

Upload PHP

Upload PHP


Upload php
L'upload en PHP est utilisé au travers du web en générale d'une façon très peut sécurisé et le plus souvent ... pas du tout sécurisé. L'un des problème est que lorsque l'on apprend la programmation en PHP, on ne fais pas toujours attention à la sécurité par manque de mise. L'upload PHP n'est pas à prendre à la légère et on doit vraiment réfléchir au potentiel risques de sécurités que cela pourrai engendré.

Ceci n'est pas la sécurité OPTIMAL que je vais vous montrer ici, mais on s'en rapproche pas mal.



Voici un petit exemple de comment uploader un fichier en php.
upload php NON sécurisé - à but pédagogique et à ne pas utiliser sur un site en production !!!

<form method="post" enctype="multipart/form-data" action="">
<input type="file" name="fichier" size="30">
<input type="submit" name="upload" value="Uploader">
</form>
<?php
if( isset($_POST['upload']) ){
    
$content_dir 'upload/';

    
$tmp_file $_FILES['fichier']['tmp_name'];

    if( !
is_uploaded_file($tmp_file) )
    {
        exit(
"Le fichier est introuvable");
    }
    
    
//vous pouvez vérifier l'extension du fichier ici.

    
$name_file $_FILES['fichier']['name'];

    if( !
move_uploaded_file($tmp_file$content_dir $name_file) )
    {
        exit(
"Impossible de copier le fichier dans $content_dir");
    }

    echo 
"Le fichier a bien été uploadé";
}
?>


Voilà donc un code d'upload assès simple et qui pourrai être encore plus simple. Il contient juste la base pour allez plus loin.



upload PHP sécurisé

Maintenant, vous pouvez aussi vérifier le fichier en fonction de son extension, de son type MIME ... et aussi vérifié que le fichier ne contient pas de caractères interdit.
Voici donc une version d'upload php sécurisé :
<form method="post" enctype="multipart/form-data" action="">
<input type="file" name="fichier" size="30">
<input type="submit" name="upload" value="Uploader">
</form>
<?php
// fonction qui recupere l'extension du fichier
function getExtension($filename){
  
$ext substr(strtolower(strrchr(basename($filename), ".")), 1);
  return 
$ext;
}
// fonction qui va sécurisé le nom du fichier
function clean_file_name($var){
  
$var strtr($var,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËéèêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn");
  
$var eregi_replace("[^a-zA-Z0-9.-]","",$var);
  return 
$var;
}


if(
$_POST['upload'])
{
  
// configuration : 
  
  // repertoire où vont être placé les fichiers
  
$content_dir $_SERVER['DOCUMENT_ROOT'].'/upload_dir/';
  
// ajouter ici les autres extensions que vous autorisé
  
$extensions=array('jpg','jpeg','gif','png');

  
// est ce qu'un fichier a ete selectionné ?
  
if(empty($_FILES['fichier']['name'])){
    exit(
"Aucun fichier sélectionné.");
  }
  
  
// on test si le fichier est uploadé
  
$tmp_file $_FILES['fichier']['tmp_name'];
  if( !
is_uploaded_file($tmp_file) ){
    exit(
"Le fichier est introuvable");
  }
  
  
// renommons le fichier pour plus de sécurité
  
$name_file clean_file_name($_FILES['fichier']['name']);
  
  
// on test les caracteres non valide
  
if(preg_match('#[x00-x1Fx7F-x9F/]#'$name_file)){
    exit(
"Caractères invalides détecté");
  }
  
  
// est ce que l'extension est valide ?
  
if(!in_array(getExtension($name_file),$extensions)) {
    exit(
"Le format de votre fichier n'est pas autorisé.");
  }

  
// upload
  
if(!move_uploaded_file($tmp_file,$content_dir.$name_file)){
    exit(
"Impossible de copier le fichier !");
  }else{
    echo 
"Le fichier a bien été uploadé";
  }
  
}
?>



On pourrai allez plus loin ? OUI !
Il faudrai définir le répertoire d'upload dans un endroit NON accéssible depuis un navigateur web, renommer complètement le fichier, vérifié que le fichier ne contient pas (DANS le fichier) du code PHP ou autre, vérifié le type MIME et faire une contre vérification avec l'extension. Mais bon, ceci est abordé dans le script d' upload sécurisé myPHPupload


Bon upload php !

Le 08/08/2008 par Sky
http://www.graphiks.net




Les commentaires
  • Le 22-02-2008, Zzzzz a écrit :
    je vient de tester et c'est assès chiader comme idée. Pas mal du tout !

  •  
  • Le 16-01-2008, Baloo a écrit :
    Sympa, c'est vraiment assès sécurisé pour une fois! Merci pour le script d'upload !

  •  
  • Le 10-11-2007, tiupPo a écrit :
    Merci beaucoup pour cet exemple d'upload en PHP. ça change des autres site qui propose uniquement des solutions partiellements sécurisés.

  •  

Nom :

Texte :

Recopier ce code : ici

Nous  -  Plan du site  -  Informations légale  -  Contact  -  © Graphiks.net