IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

votre avis sur la sécurisation de ce script


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 397
    Points : 165
    Points
    165
    Par défaut votre avis sur la sécurisation de ce script
    Bonjour,
    tout est dans le titre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    if($image == 'ok')
    {
    		//============================================
    		$dossier = '../'.$_SESSION["login"].'_image/';
    		$fichier = $_FILES['photo']['name'];
    		$poids_maxi = 500000;  // 500.000 Octets = 1/2 MO
    		$poids = filesize($_FILES['photo']['tmp_name']);
    		$extensions = array('.jpg', '.jpeg','JPG','JPEG');
    		$type_extension = strrchr($_FILES['photo']['name'], '.');
     
     
    				$erreur_load = 'x';
    				$stop = 0;
     
    		//Début des vérifications de sécurité...
     
    			// teste si un fichier est sélectionné
    			if($_FILES['photo']['size']<=0)
    			{
    				$erreur_load = 'Aucun fichier n\'a été sélectionné.';
    				$stop = 1;
    			}
     
    			// teste si une erreur c'est produite pendant la transfert		
    			if($_FILES['photo']['error']>0 && $stop == 0)
    			{
    				$erreur_load = 'Erreur lors du transfert du fichier.';
    				$stop = 1;
    			}		
     
    			// Vérification que le fichier est une image
    			if( $stop == 0)
    			{
    				 $infosImg = getimagesize($_FILES['photo']['tmp_name']);
    				 if($infosImg[2] <> 2 ) 
    				 { 
    				 	$erreur_load='Ce fichier n\'est pas une image';
    					 $stop = 1;
    				 }
    			}
     
    			// Vérification que le fichier n'a pas une double extension
    			if( $stop == 0)
    			{
    				$test_double_extension = explode('.',$fichier);
    				$L = count($test_double_extension);
    				if ($L>2)
    				 { 
    					$erreur_load = 'Nom de fichier non valide double extention'; 
    					$stop = 1; 
    				 }
    			}
     
    			// Vérifie l'extension du fichier
    		    if( $stop == 0)
    			{
    				if(!in_array($type_extension, $extensions)) 
    				{
    					 $erreur_load = 'Vous devez uploader un fichier de type jpg, jpeg';
    					 $stop = 1;
    				}
    			}
     
    			// Vérifie du poids du fichier	
    		    if( $stop == 0)
    			{
    				if($poids>$poids_maxi)
    				{
    					 $erreur_load = 'Le fichier est trop gros...';  
    					 $stop = 1;
    				}
    			}
     
     
    	if($erreur_load == 'x') //S'il n'y a pas d'erreur, on upload
    		{
     
    			// Génère un nom de fichier aléatoire avec bin2hex() sur random_bytes()
    			   $image = bin2hex(random_bytes(16)).$type_extension;
     
    			//Déplacement du fichier renvoie TRUE, si ça a fonctionné...	
    				if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $image)) 
    					{
     
    						// Enregistrement dans la collection 
    						$id = $_SESSION['fiche_active'];
    						$sql = 'UPDATE '.$_SESSION["nom_table"].' SET	
    								chemin_photo= "'.$_SESSION["login"].'_image/", 
    								photo= "'.$image.'" 
    								WHERE id='.$id;
    						mysqli_query($base_coll,$sql)or die ('Erreur table '.$_SESSION["nom_table"].'<br>'.$sql.'<br>'.mysqli_error($base_coll));
    					} // fin de if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $image))
    							//------------------------------------------
     
    		} // fin de if($erreur_load == 'x')
     
     
     
    } // fin de if($image == 'ok')
     
     
     
     
    ?>

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 333
    Points : 15 677
    Points
    15 677
    Par défaut
    du côté de la sécurité, j'ai l'impression que tout est bien testé. il faudra aussi prendre soin au début du script de vérifier que l'utilisateur a bien les droits d'uploader un fichier.

    par contre du point de vue de la conception, je trouve ça bizarre d'avoir un nom d'une table qui vient d'une variable. cela voudrait dire que plusieurs tables ont des champs similaires ce qui ressemble à un problème de conception de la structure des données.

  3. #3
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 397
    Points : 165
    Points
    165
    Par défaut
    Bonjour,
    merci pour votre avis.
    Concernant la variable avec un nom de table c'est tout simplement parce que un même "client"
    peut avoir plusieurs tables qui lui sont spécifiques ouvertes en même temps.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Votre avis sur un script bash
    Par nenex73 dans le forum Shell et commandes GNU
    Réponses: 55
    Dernier message: 04/07/2020, 15h53
  2. [MySQL] Votre avis sur la qualité d'un script
    Par Telecaster dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/06/2008, 10h23
  3. Votre avis sur mon 1er script
    Par jfrsm dans le forum VBScript
    Réponses: 3
    Dernier message: 17/09/2007, 09h45
  4. Donnez votre avis sur les articles de Developpez.com
    Par Geronimo dans le forum C++Builder
    Réponses: 13
    Dernier message: 14/01/2007, 22h00
  5. [Blog] Votre avis sur ce script de Blog en PHP (GPL)
    Par peck dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 04/01/2007, 09h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo