Sécurité php/mysql

katarina999 Messages postés 75 Statut Membre -  
JooS Messages postés 2705 Statut Membre -
Bonsoir,

J'ai réalisé un petit script pour comprendre les requêtes dynamiques.
Pourriez-vous me dire comment faire pour le sécuriser ? Si on change le id dans l'url, et qu'on en tape un qui n'existe pas, ma page s'affiche quand même.

Voici mon code :

<?php
include 'identification.php';

$user = $_GET['user'];

$connexion = mysql_connect($adresse_serveur, $identifiant, $password) or die("Impossible de se connecter : " . mysql_error());
mysql_select_db($nom_de_la_bd,$connexion) or die("Une erreur est survenue : " . mysql_error());

if ($user == ''){

$requete = "SELECT * FROM test_utilisateurs;";
$resultats = mysql_query($requete,$connexion) or die("Une erreur est survenue : " . mysql_error());

while ($ligne = mysql_fetch_array($resultats))
{
echo '
<p>Nom : '.$ligne["nom"].'</p>
<p>Prénom : '.$ligne["prenom"].'</p>
<p><a href="'.$_SERVER['PHP_SELF'].'?user='.$ligne["no_id"].'">Accèder à la fiche détaillée</a></p><hr />
';
}
}

else if($user == $_GET['user']){
$requete = "SELECT * FROM test_utilisateurs WHERE no_id = '".$user."'";

$resultats = mysql_query($requete,$connexion) or die("Une erreur est survenue : " . mysql_error());

#liste les infos pour un utilisateur
while ($ligne = mysql_fetch_array($resultats))
{
echo '
<p>Nom : '.$ligne["nom"].'</p>
<p>Prénom : '.$ligne["prenom"].'</p>
<p>Courriel : '.$ligne["courriel"].'</p>
<p>Mot de passe : '.$ligne["mdp"].'</p>
';
}
echo'<p><a href="afficher.php">Retour</a><p>';
}

mysql_close($connexion);
?>

Merci de bien vouloir m'aider.

Kat.

5 réponses

  1. __construct()
     
    Bonsoir,
    Vérifies d'abord que l'id est bien présente dans la table test_utilisateurs et ensuite avec une simple condition tu peux afficher un message du style "Cette page n'existe pas...".
    D'autres part, cette requête comporte une erreur de syntaxe :
    $requete = "SELECT * FROM test_utilisateurs;";
    0
  2. katarina999 Messages postés 75 Statut Membre
     
    Et si je dis compte tous les id et que je fais une condition qui dit que si l'id est supérieur au total des id => message d'erreur.

    Est-ce une bonne technique ?
    0
  3. __construct()
     
    Par exemple (à améliorer) :
    <?php
    include 'identification.php';
    
    $user = $_GET['user'];
    
    $connexion = mysql_connect($adresse_serveur, $identifiant, $password) or die("Impossible de se connecter : " . mysql_error());
    mysql_select_db($nom_de_la_bd,$connexion) or die("Une erreur est survenue : " . mysql_error());
    
    if($user == '') {
    	$requete = "SELECT * FROM test_utilisateurs";
    	$resultats = mysql_query($requete,$connexion) or die("Une erreur est survenue : " . mysql_error());
    
    	while ($ligne = mysql_fetch_array($resultats)) {
    		echo '<p>Nom : '.$ligne["nom"].'</p>
    			<p>Prénom : '.$ligne["prenom"].'</p>
    			<p><a href="'.$_SERVER['PHP_SELF'].'?user='.$ligne["no_id"].'">Accéder à la fiche détaillée</a></p><hr />'; 
    	}
    } else {
    	$requete = "SELECT no_id FROM test_utilisateurs WHERE no_id='".$user."'";
    	if(mysql_num_rows($requete) != 0) {
    		$req = "SELECT * FROM test_utilisateurs WHERE no_id='".$user."'";
    		$resultats = mysql_query($req,$connexion) or die("Une erreur est survenue : " . mysql_error());
    
    		#liste les infos pour un utilisateur
    		while ($ligne = mysql_fetch_array($resultats)) {
    			echo '<p>Nom : '.$ligne["nom"].'</p>
    				<p>Prénom : '.$ligne["prenom"].'</p>
    				<p>Courriel : '.$ligne["courriel"].'</p>
    				<p>Mot de passe : '.$ligne["mdp"].'</p>'; 
    		}
    		echo'<p><a href="afficher.php">Retour</a><p>';
    		mysql_free_result($resultats);
    	} else {
    		echo "<p>Aucun résultat correspondant à votre demande.</p>\n";
    	}
    	mysql_free_result($requete);
    }
    mysql_close($connexion);
    ?>
    0
  4. katarina999 Messages postés 75 Statut Membre
     
    Merci ! Je testerai ta méthode déjà pour voir.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. JooS Messages postés 2705 Statut Membre 228
     
    Le script devrait afficher une erreur dans le cas ou $_GET['user'] n'existerait pas ...Undefined ..., enfin, je pense ...

    donc...
    <?php  
    include 'identification.php';  
    
    $connexion = mysql_connect($adresse_serveur, $identifiant, $password) or die("Impossible de se connecter : " . mysql_error());  
    mysql_select_db($nom_de_la_bd,$connexion) or die("Une erreur est survenue : " . mysql_error());  
    
    if(!isset($_GET['user']) OR empty($_GET['user'])) {  
     $requete = "SELECT * FROM test_utilisateurs";  
     $resultats = mysql_query($requete,$connexion) or die("Une erreur est survenue : " . mysql_error());  
    
     while ($ligne = mysql_fetch_array($resultats)) {  
      echo '<p>Nom : '.$ligne["nom"].'</p>  
       <p>Prénom : '.$ligne["prenom"].'</p>  
       <p><a href="'.$_SERVER['PHP_SELF'].'?user='.$ligne["no_id"].'">Accéder à la fiche détaillée</a></p><hr />';   
     }  
    } else {  
            $user = htmlentities($_GET['user'],ENT_QUOTES);  
     $requete = "SELECT no_id FROM test_utilisateurs WHERE no_id='".$user."'";  
     if(mysql_num_rows($requete) != 0) {  
      $req = "SELECT * FROM test_utilisateurs WHERE no_id='".$user."'";  
      $resultats = mysql_query($req,$connexion) or die("Une erreur est survenue : " . mysql_error());  
    
      #liste les infos pour un utilisateur  
      while ($ligne = mysql_fetch_array($resultats)) {  
       echo '<p>Nom : '.$ligne["nom"].'</p>  
        <p>Prénom : '.$ligne["prenom"].'</p>  
        <p>Courriel : '.$ligne["courriel"].'</p>  
        <p>Mot de passe : '.$ligne["mdp"].'</p>';   
      }  
      echo'<p><a href="afficher.php">Retour</a><p>';  
      mysql_free_result($resultats);  
     } else {  
      echo "<p>Aucun résultat correspondant à votre demande.</p>\n";  
     }  
     mysql_free_result($requete);  
    }  
    mysql_close($connexion);  
    ?>  
    


    Le include, c'est pourquoi??
    0