Sécurité php/mysql

Fermé
katarina999 Messages postés 68 Date d'inscription dimanche 30 janvier 2011 Statut Membre Dernière intervention 28 avril 2015 - 30 janv. 2011 à 18:36
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 - 14 avril 2011 à 17:08
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()
30 janv. 2011 à 20:28
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 dimanche 30 janvier 2011 Statut Membre Dernière intervention 28 avril 2015
30 janv. 2011 à 20:36
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()
30 janv. 2011 à 20:53
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 dimanche 30 janvier 2011 Statut Membre Dernière intervention 28 avril 2015
2 févr. 2011 à 21:59
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 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 14/04/2011 à 17:19
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