Identification qui flanche

Signaler
Messages postés
52
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
17 mai 2007
-
Messages postés
43
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
17 juillet 2007
-
bonjour je reposte encor dans AU SECOUR parceque j'ai fait des recherche et que vraiment je vois pas d'ou vien le pb:

dans un script d'identification je controle si le mots de passe existe si oui j'extrait de la table le pseudo correspondant au mdp et je controle si celui entrer dans le formulaire est le meme :

// recuperation des variable

$pseudo = "$_POST[pseudo]";
$passe = "$_POST[passe]";

// verification des champs pseudo et mots de passe

if(!empty($pseudo) && !empty($passe))
{
$result mysql_query("SELECT * FROM membres WHERE passe '$passe'");
while ($id = mysql_fetch_array($result))
{
$pseudo_conf = $id['pseudo_site'];
if($pseudo = $pseudo_conf)
{
session_start(); // On démarre la session
$_SESSION['pseudo'] = $pseudo; // On enregistre le login dans la session (attention, les variables de session n'ont pas de signe dollar ($) )
$_SESSION['passe'] = $passe; // On enregistre le mot de passe dans la session

echo ("identification corect");
header("Status: 301 Moved Permanently", false, 301);
header("Location: ./espace1.php");
}

// Sinon (else) l'identification n'est pas réussite. On affiche le message d'erreur :
else
{
echo ("Erreur d'identification. Veuillez entrer un login et un mot de passe valide.");
}
}
}
else
{
echo "veuiller remplir tout les champs svp";
}


normalement, ca devrait fonctionner selon moi mais aux lieu d'afficher une erreur quelquonc le script se contente de laisser acceder a l'espace membre une personne entrant juste un mdp valide meme si le pseudo ne correspond pas.

Donc si vous pouriez m'aider :)

Merci d'avance

4 réponses

Messages postés
52
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
17 mai 2007

bon je me rectifie moi meme, il fallait que je fasse :



if ($pseudo == '$pseudo_conf')

{

instruction

}



au lieu de



if($pseudo = '$pseudo_conf')

{

instruction

}



c'est la deuxieme fois que ca me le fait aujourd'hui et pourtant j'ai
jamais eu besoin d'etre strictement egal... Enfin bon voila c'est
régler et ca poura peut etre en aider certain :)
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
En même temps.. dans ta requête, fait plutot :



$sql mysql_query("SELECT COUNT(*) as count FROM membres WHERE passe '".$passe".' AND login = '".$login."' ");

$data = mysql_fetch_array($sql);

if ( $data['count'] == 1 ) {

// Login et pass ok

} else {

// Login ou mot de passe incorrect

}



Aussi simple, plus rapide :o
Messages postés
52
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
17 mai 2007

re rectification : sans les " ' " (simple quote) autour de $pseudo_conf



sinon bug :)
Messages postés
43
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
17 juillet 2007

FhX a raison, il faut que tu emploi sa methode car ton code d'origine est trop fragile face a l'injection SQL.

exemple:

tu entre comme mot de passe ' OR '1' = '1

ca va te donner comme ordre SQL

SELECT * FROM membres WHERE passe = '' OR '1'='1'

or comme 1 est toujours égal à 1, ca te sort toutes les lignes

donc en entrant n'importe quel pseudo existant dans la base, tu peut te
connecter avec (tu fait pour chaque ligne resultante une verification
avec le nom entré donc obligatoirement tu tombe dessus).

Bon d'accord, ya peut de chance que ca arrive, il faudrais connaitre le code... Mais bon, on sait jamais.



Une derniere remarque sur le code de FhX, c'est pareil, si il n'y a
qu'un nom dans la base, en répetant la meme opération, obtien 1. La
aussi ya peut de chances que ca arrive, mais je te conseil de faire
commme ca:



$verif mysql_query("SELECT passe FROM membres WHERE login '".$login."'");

$verif_row = mysql_num_rows($verif);



if($verif_row==1)

{

$pass_ds_bd = mysql_result($verif,0,'passe');


if($pass_ds_bd == $passe)


{

//identification ok

}

else

{

//mot de passe incorrect

}

}

else

{

//login incorrect

}



voila, bonne continuation

Stevo