Forum Programmation.php Problème pour faire un login

Posté par  .
Étiquettes : aucune
0
7
juil.
2008
Voilà je rencontre un problème assez étrange en essayent de faire un script login.php qui a pour mission de verifier login et password

Premier problème mySQL veut des ' ' autour du nom de la variable si je les mets l'espace est alors vide
second problème, si je force le nom a la main alors
-Si le mot de passe est juste aucune variable n'est interpreté
-Si le mot de passe est faux alors les variables sont interprétés
Je m'explique

<?
/********************************
* login.php *
* Check login and password and *
* Allow or deny access *
********************************/
//Connection DB et ouverture session
$nom=$_POST["login"];
$pass=md5($_POST["password"]);
$sql='SELECT Md5_passwd,IdJ from NP2_Perso WHERE Nom=';
$sql.=chr(34);
$sql.="Moi"; // Ici $nom est en dur pour faire des essais
$sql.=chr(34);
$query=mysql_query($sql,$db);
$data = mysql_fetch_array($query);
$mdpass=$data["Md5_passwd"];
if ($pass==$mdpass) { // J'ai aussi testé avec strcomp le pb vient pas de la
/* Redirection */
}
else {
/* Message pour Debug */
echo " Mauvais Login ou Mot de Passe \n"; // Toujours affiché
echo $sql;
echo " \n";
echo "XXX"; // Toujours affiché
echo $nom; // N'est affiché que si mot de passe est faux
echo "";
echo $pass," ",$data["Md5_passwd"];
echo "
",$_POST["password"]; // Toujours même valeur si mot de passe est juste différente de celle en db
}
?>

Par exemple si bon mot de passe ça me retourne

Mauvais Login ou Mot de Passe
SELECT Md5_passwd,IdJ from NP2_Perso WHERE Nom="Moi"
XXX
d41d8cd98f00b204e9800998ecf8427e
b59c67bf196a4758191e42f76670ceba

Si mauvais mdp ça me retourne

Mauvais Login ou Mot de Passe
SELECT Md5_passwd,IdJ from NP2_Perso WHERE Nom="Moi"
XXXMoi
72777f7be5992b0789396f2b8d92c221
b59c67bf196a4758191e42f76670ceba
MauvaisMotdePasse

Je vous avoue que la je deviens fous

Y a t'il un expert dans la place...
  • # une suggestion

    Posté par  . Évalué à 1.

    bonsoir,

    simple suggestion, voici comment je procède:

    <?php
    $qry="SELECT member_id FROM members WHERE login='".$_POST['login']."'
    AND passwd='".md5($_POST['password'])."'";
    $result=mysql_query($qry);

    if(mysql_num_rows($result)>0) {
    //Login Successful
    //Regenerate session ID to
    //prevent session fixation attacks
    session_regenerate_id();
    $member=mysql_fetch_assoc($result);
    $_SESSION['SESS_MEMBER_ID']=$member['member_id'];
    //Write session to disc
    session_write_close();
    header("location: member-index.php");
    exit();
    }

    ?>

    Ce qui signifie en français que tu interroges ta BD avec le login et le md5 du pwd. S'il y a une ligne (au moins et normalement au plus) en résultat, c'est que le login est ok.

    Bon courage.
    • [^] # Re: une suggestion

      Posté par  . Évalué à 5.

      Attention aux injections tout de même.

      My 2 cents !
    • [^] # Re: une suggestion

      Posté par  . Évalué à 2.

      ça marche presque, les choses sont de plus en plus interessant j'ai l'impression que j'ai un bug qui vient du niveau inferieur

      Si ma requette est fausse mauvais nom de champ, après avoir fait la requette je fais
      echo $sql
      j'ai
      SELECT IdJ FROM NP2_Perso WHERE Nom='Moi' AND Md5_passxxwd='b59c67bf196a4758191e42f76670ceba'
      Ici mon le nom de mon champ MD5_passwd est faux, si je corrige la faute
      j'ai alors
      SELECT IdJ FROM NP2_Perso WHERE Nom='' AND Md5_passwd='d41d8cd98f00b204e9800998ecf8427e'

      Le tout en uttilisant la ligne de code de Fyah
      $sql="SELECT IdJ FROM NP2_Perso WHERE Nom='".$_POST['login']."'
      AND Md5_passxxwd='".md5($_POST['password'])."'";

      Précision technique,
      Ca tourne sur un compte free et j'ai vraiement l'impression de bloquer sur un problème bidon

      Par curiosité
      tu as le courage de m'expliquer le principe du session_regenerate_id();
      et des session fixation attacks ?
      Sinon j'irais jeter un coup d'oeil à l'occasion
      • [^] # Re: une suggestion

        Posté par  . Évalué à 2.

        Tiens c'est interessant ça,
        si je fait une redirection propre avec header()
        ça marche,
        en tout cas va falloir que je mene l'enquette

        Cool je me suis enfin répondu à moi même je vais pouvoir voir le fameux easter egg

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.