Identification qui flanche

maxoudu328 Messages postés 52 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 17 mai 2007 - 30 août 2005 à 13:35
stevo77 Messages postés 43 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 17 juillet 2007 - 30 août 2005 à 16:25
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

maxoudu328 Messages postés 52 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 17 mai 2007
30 août 2005 à 13:46
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 :)
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
30 août 2005 à 13:51
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
0
maxoudu328 Messages postés 52 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 17 mai 2007
30 août 2005 à 13:51
re rectification : sans les " ' " (simple quote) autour de $pseudo_conf



sinon bug :)
0
stevo77 Messages postés 43 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 17 juillet 2007
30 août 2005 à 16:25
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
0
Rejoignez-nous