script de connexion défectueux - PHP - Programmation
Marsh Posté le 23-07-2010 à 07:43:52
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
Marsh Posté le 23-07-2010 à 08:22:43
On m'a proposé cela comme solution:
Citation : $compIdent='SELECT * FROM CAROUBLE WHERE ALLONYME = "'.mysql_real_escape_string($surnom).'"'; |
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?
Marsh Posté le 23-07-2010 à 12:12:12
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 )
- 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.
Marsh Posté le 23-07-2010 à 16:02:26
Il faut récupérer le mot de passe pour le vérifier.
Marsh Posté le 23-07-2010 à 18:38:44
sinon tu as plus simple et plus performant, la méthode de WiiDs :
Code :
|
Marsh Posté le 24-07-2010 à 16:48:53
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.
Marsh Posté le 24-07-2010 à 16:53:26
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 :
|
Marsh Posté le 24-07-2010 à 19:19:09
Cookies ou sessions PHP, au choix.
Par contre, Luc@s, dans ton code, il faut remplacer
Code :
|
par
Code :
|
Marsh Posté le 25-07-2010 à 10:16:28
les deux fonctionnent
et sinon, mieux vaut utiliser les sessions pour ce genre de choses
Marsh Posté le 25-07-2010 à 13:43:45
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.
Marsh Posté le 25-07-2010 à 14:04:44
merci je sais dans mon exemple j'ai utilisé que des booléans, donc... bref
Marsh Posté le 26-07-2010 à 14:35:41
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 :
|
et sur la page 'page-protegee.php' :
Code :
|
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?
Marsh Posté le 26-07-2010 à 14:49:39
tu ne comprends pas ce que tu fais surtout.
Apprends les bases et essaye de comprendre ce que tu fais
Marsh Posté le 26-07-2010 à 15:27:05
+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.
Marsh Posté le 23-07-2010 à 06:00:17
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.
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
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 :
<!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 : </style></td>
<td><input type="text" Name="pseudo" /></td>
</tr>
<tr>
<td>Password : </td>
<td><input type="password" Name="pass" /></td>
</tr>
<tr>
<td> </td>
<td><center><input type="submit" name="verification" value="Envoyer" /></center></td>
</tr>
</table>
</form><br />
<a href="index.html">Retour à l'accueil</a>
</center>
</body>
</html>
Le code de la page verifpass.php chargé de la vérification du couple login/password :
<!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 à la base de donné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élicitations <?php echo(htmlentities($surnom)); ?>, vous êtes connecté.</p><br /><br />
<a href="index.html">Retour à l'accueil</a>
</body>
</html>
Pour finir le code de la page param.inc.php qui fabrique la signature du mot de passe:
<?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.