maxoudu328
Messages postés52Date d'inscriptionmercredi 24 novembre 2004StatutMembreDernière intervention17 mai 2007
-
30 août 2005 à 13:35
stevo77
Messages postés43Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention17 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 :
// 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
// 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.
maxoudu328
Messages postés52Date d'inscriptionmercredi 24 novembre 2004StatutMembreDernière intervention17 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 :)
stevo77
Messages postés43Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention17 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."'");