Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1585 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  script de connexion défectueux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

script de connexion défectueux

n°2011197
SV_LVH
Posté le 23-07-2010 à 06:00:17  profilanswer
 

Salut tout le monde,
 
Je suis en train de tester un script trouver dans un tuto php pour faire un système de connexion-identification des utilisateurs d'un site. J'ai eu beau cherché je ne vois pas pourquoi ça ne fonctionne pas.
 
Quand je tape un login et un mot de passe au hazard (donc faux) la réponse est : "Félicitation {login} vous êtes maintenant connecté!"  
 
Ce qui est très gênant pour un script d'authentification s'il laisse rentrer n'importe qui.  :heink:  
 
Je vous poste tous les morceaux de code que j'utilise (au cas ou une bêtise m'aura échappé). Si une grosse faute vous saute aux yeux prévenez moi que j'essaie de régler le problème.
 
Le code SQL de création de ma table

Citation :

create table CAROUBLE
(
   ID_CAROUBLE  int(10) not null auto_increment,
   ALLONYME     varchar(32) not null,
   VERROU  varchar(32) not null,
   primary key (ID_CAROUBLE)
)ENGINE=MYISAM;


 
Le code de la page connexion.html :

Citation :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Connexion</title>
</head>
<body>
<center>
    <form action="verifpass.php" method="post">
        <table>
            <tr>
              <td>Login :&nbsp;</style></td>
              <td><input type="text" Name="pseudo" /></td>
            </tr>
            <tr>
              <td>Password :&nbsp;</td>
              <td><input type="password" Name="pass" /></td>
            </tr>
            <tr>
              <td>&nbsp;</td>
              <td><center><input type="submit" name="verification" value="Envoyer" /></center></td>
            </tr>
        </table>
    </form><br />
<a href="index.html">Retour &agrave; l'accueil</a>
</center>
</body>
</html>


 
Le code de la page verifpass.php chargé de la vérification du couple login/password :

Citation :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>
<body>
<?php
$host = "localhost";
$user = "root";
$password = "";
$bdd = "securite";
//--------- Connection à Mysql  ----------//
mysql_connect($host, $user, $password) or die("Impossible de se connecter au serveur !" );
mysql_select_db($bdd) or die("Impossible de se connecter &agrave; la base de donn&eacute;es !" );
 
//--------- Creation de la signature -----//
include('param.inc.php');
//--------- Insertion des valeurs --------//
$seing = $_POST['pass'];
$sceau = md5(contreseing($seing));
$surnom = $_POST['pseudo'];
$compIdent='SELECT COUNT(*) FROM CAROUBLE WHERE ALLONYME = "'.mysql_real_escape_string($surnom).'" AND VERROU = "'.mysql_real_escape_string($sceau).'"';
mysql_query($compIdent) or die(mysql_error());
?>
<p>F&eacute;licitations <?php echo(htmlentities($surnom)); ?>, vous &ecirc;tes connect&eacute;.</p><br /><br />
<a href="index.html">Retour &agrave; l'accueil</a>
</body>
</html>


 
Pour finir le code de la page param.inc.php qui fabrique la signature du mot de passe:

Citation :

<?php
 function contreseing($seing) {
 $praefixus = "d^9@0-";
 $subfixus = "#8+S%cZ";
 $seing = $praefixus.$seing.$subfixus;
 return strrev($seing);
 }
?>


 
Je ne vois vraiment pas d'où peut venir le dysfonctionnement, mais comme c'est mon premier test d'authentification des utilisateurs je ne m'attendais pas vraiment à ce que ça fonctionne du premier coup.
 
Merci du temps que vous avez pris pour lire ce message.


Message édité par SV_LVH le 23-07-2010 à 06:01:15

---------------
Quand vous demandez sur un forum comment changer un pneu de voiture peu de gens vous répondent. Et ceux qui le font vous expliquent généralement comment rouler sur 3 roues.
mood
Publicité
Posté le 23-07-2010 à 06:00:17  profilanswer
 

n°2011200
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 23-07-2010 à 07:43:52  profilanswer
 

A première vue, tu fais une requête SQL mais tu traites absolument pas le résultat. La requête peut tout aussi bien renvoyer 0 ou un résultat que ton script agit pareil. Donc vu que le résultat de la requête est jamais vérifié et qu'il n'y a pas de message autre que "Félicitations vous êtes loggués" ça peut pas vraiment te dire autre chose.
 
Sinon je vois mal l'intérêt du SELECT COUNT(*). Perso je ferais un SELECT normal, puis un mysql_num_rows pour connaître le nombre de lignes renvoyées [:transparency]


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
n°2011208
SV_LVH
Posté le 23-07-2010 à 08:22:43  profilanswer
 

On m'a proposé cela comme solution:

Citation :

$compIdent='SELECT * FROM CAROUBLE WHERE ALLONYME = "'.mysql_real_escape_string($surnom).'"';
$req = mysql_query($compIdent) or die(mysql_error());
while($data = mysql_fetch_array($req))
   {
        $bpass = $data['VERROU'];
        if($sceau != $bpass)
            {
                echo ("Erreur de mot de passe" );
            }
        else
            {
    echo ("<p>F&eacute;licitations ".(htmlentities($surnom))." vous &ecirc;tes connect&eacute;.</p><br /><br />\n" );
    echo ("<a href=\"index.html\">Retour &agrave; l'accueil</a>\n" );
            }
    }


 
Mais si j'introduis un couple login/password incorrecte j'obtiens une belle page toute blanche. Par si si je tape correctement l'identifiant et le mot de passe, j'ai le fameux message "Félicitations {login}...".
 
D'où ça peut venir?

n°2011308
deliriumtr​emens
sic transit intestinal...
Posté le 23-07-2010 à 12:12:12  profilanswer
 

Peut-être parce que tu fais ton test dans un "while". Donc si ton "$surnom" n'existe pas dans ta base, tu n'entres pas dans la boucle...
 
Sinon :
- tu n'as pas besoin d'un "while" : a priori, si tu as plusieurs utilisateurs avec le même login / mdp, c'est un peu douteux => mysql_num_rows est suffisant pour le test. (si 0 erreur, si 1 ok (et si > 1 :heink: )
- dans ta requête, tu ne recherches que le "surnom". Il serait bien de vérifier le mot de passe, tant qu'à faire   ;)
- pourquoi faire un select * ? Tu as vraiment besoin de récupérer le mot de passe ? J'en doute un peu. L'identifiant et le surnom devraient te suffire.


Message édité par deliriumtremens le 23-07-2010 à 12:15:32
n°2011373
aideinfo
Posté le 23-07-2010 à 16:02:26  profilanswer
 

Il faut récupérer le mot de passe pour le vérifier.


---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
n°2011432
Profil sup​primé
Posté le 23-07-2010 à 18:38:44  answer
 

sinon tu as plus simple et plus performant, la méthode de WiiDs :

Code :
  1. $sql = "SELECT machin FROM users WHERE login = '$tonlogin' AND pass = '$tonpass'";
  2. $query = mysql_query($sql);
  3.  
  4. if(!$query) {
  5.   // bla bla bla query failed
  6. }
  7.  
  8. if(mysql_num_rows($query)) {
  9.  // connexion réussie
  10. } else {
  11.  // échec de la connexion (login OU mdp incorrect)
  12. }

n°2011498
SV_LVH
Posté le 24-07-2010 à 16:48:53  profilanswer
 

En effet cela fonctionne correctement maintenant, merci à tous. Il me reste toutefois quelques questions à propos de la connexion.
 
Comment faire que pour chaque page du site (ou du moins celles que je veux protéger) vérifie que l'utilisateur c'est bien identifié à un moment donné (on va pas lui demander de s'identifier à chaque changement de page non plus )?
 
Et ensuite comment fait-on pour bloquer ou libérer l'accès à ces pages en fonction de la réponse de la vérification de l'identification?
 
Navré de vous ennuyer avec ça mais c'est la première authentification que j'installe sur un site, donc je ne maitrise pas du tout le sujet.

n°2011499
Profil sup​primé
Posté le 24-07-2010 à 16:53:26  answer
 

il y a pas mal de choses sur le net à ce sujet
 
pour faire ce que tu veux, tu devrais utiliser les sessions
ça ressemblerait à ça (en gros) :

Code :
  1. // connexion
  2. if(login_et_pass_correct)
  3. {
  4.    $_SESSION['connected'] = true;
  5. }
  6.  
  7. // déconnexion
  8. $_SESSION['connected'] = false;
  9.  
  10. // page privée
  11. if($_SESSION['connected'] !== true)
  12. {
  13.    header('location: acces/non/autorise.php');
  14.    exit();
  15. }
  16.  
  17. // reste de la page


 
;)


Message édité par Profil supprimé le 24-07-2010 à 16:53:48
n°2011511
aideinfo
Posté le 24-07-2010 à 19:19:09  profilanswer
 

Cookies ou sessions PHP, au choix.
 
Par contre, Luc@s, dans ton code, il faut remplacer

Code :
  1. if($_SESSION['connected'] !== true)

par

Code :
  1. if($_SESSION['connected'] != true)


Message édité par aideinfo le 24-07-2010 à 19:20:36

---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
n°2011539
Profil sup​primé
Posté le 25-07-2010 à 10:16:28  answer
 

les deux fonctionnent
 
et sinon, mieux vaut utiliser les sessions pour ce genre de choses


Message édité par Profil supprimé le 25-07-2010 à 10:16:45
mood
Publicité
Posté le 25-07-2010 à 10:16:28  profilanswer
 

n°2011565
aideinfo
Posté le 25-07-2010 à 13:43:45  profilanswer
 

La syntaxe !== compare aussi le type de donnée, il vaut donc mieux utiliser !=, la première syntaxe n'étant pas approrpiée dans le cas présent.


---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
n°2011567
Profil sup​primé
Posté le 25-07-2010 à 14:04:44  answer
 

merci je sais :o dans mon exemple j'ai utilisé que des booléans, donc... bref :p

n°2011814
SV_LVH
Posté le 26-07-2010 à 14:35:41  profilanswer
 

Merci pour vos réponses.
 
$_SESSION['login'] = $surnom;     // $sceau c'est le mot de passe
 
Je suis en train de tester cette technique mais pour l'instant cela ne fonctionne pas.  
 
Sur ma page verifpass.php :

Code :
  1. while($data = mysql_fetch_array($req))
  2.   {
  3.        $bpass = $data['VERROU'];
  4.        if($sceau != $bpass)
  5.            {
  6.         $_SESSION['connected'] = false;
  7.                echo "Erreur de mot de passe";
  8.         echo "<a href=\"page-protegee.php\" target=\"_blank\">test de la page</a>";
  9.            }
  10.        else
  11.            {
  12.         $_SESSION['connected'] = true;
  13.         echo "<p>F&eacute;licitations ".(htmlentities($surnom))." vous &ecirc;tes connect&eacute;.</p><br /><br />\n";
  14.         echo "<a href=\"index.html\">Retour &agrave; l'accueil</a><br />\n";
  15.         echo "<a href=\"page-protegee.php\">test de la page</a>";
  16.            }
  17.    }


 
et sur la page 'page-protegee.php' :

Code :
  1. <?php
  2. if($_SESSION['connected'] !== true)
  3. {
  4.   header('location: acces/non/autorise.php');
  5.   exit();
  6. }?>
  7. <p>Ceci est une page protégée. Si vous accédez à cette page sans vous être identifié, c'est que le script ne fonctionne pas.</p>


 
Quand je mets un login/password valide et que je clique sur le lien vers la page protégée, j'ai le message d'erreur que je devrais avoir si je n'étais pas identifié : "The requested URL /essais/securite/acces/non/autorise.php was not found on this server."
 
Ai-je oublié quelque chose?


Message édité par SV_LVH le 26-07-2010 à 14:36:43
n°2011825
Profil sup​primé
Posté le 26-07-2010 à 14:49:39  answer
 

tu ne comprends pas ce que tu fais surtout.
Apprends les bases et essaye de comprendre ce que tu fais :(

n°2011839
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 26-07-2010 à 15:27:05  profilanswer
 


+1.
 
En copiant collant du code ça finira toujours par foirer dans le pire des cas ou bien être bourré de failles de sécurité dans le pire des cas. [:spamafote]


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  script de connexion défectueux

 

Sujets relatifs
script pour se loguer à un logiciel en fonction de l'adresse IP ou MAC[connexion MySQL serveur windows]PHP ne peut charger l'extension mysql
script active directoryVariable $_SERVER['SCRIPT_URI'] pas disponible
utilisation de script js plusieurs fois dans une même pagescript vba pour outlook seveur 2007... aide
script avec un print qui ne marche pas[VB6] Connexion ADO à Excel.
script shell + awkProblème script avec joomla
Plus de sujets relatifs à : script de connexion défectueux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR