Sécurité php/mysql

katarina999 Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   -  
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

5 réponses

__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
katarina999 Messages postés 68 Date d'inscription   Statut Membre Dernière intervention  
 
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
__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
katarina999 Messages postés 68 Date d'inscription   Statut Membre Dernière intervention  
 
Merci ! Je testerai ta méthode déjà pour voir.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   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