Aide securisation d'un code de connexion
Fermé
geoffreyvp
-
12 mars 2011 à 11:01
avion-f16 Messages postés 19250 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 22 décembre 2024 - 13 mars 2011 à 19:49
avion-f16 Messages postés 19250 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 22 décembre 2024 - 13 mars 2011 à 19:49
A voir également:
- Aide securisation d'un code de connexion
- Gmail connexion - Guide
- Code ascii de a - Guide
- Code puk bloqué - Guide
- Code de déverrouillage oublié - Guide
- D'où peut venir un problème de connexion internet sur un ordinateur ? - Guide
7 réponses
avion-f16
Messages postés
19250
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
22 décembre 2024
4 505
12 mars 2011 à 18:33
12 mars 2011 à 18:33
Salut.
- Ligne 4 : Inutile
- Lignes 5 et 6 : Elles ne servent à rien
- Ligne 7 : copie de la ligne 3 : $pseudo est déjà protégée
- Ligne 8 : Il ne faut pas de point-virgule dans les structures conditionnelles
- Ligne 14 : On utilise deux slashes pour mettre une ligne en commentaire
Dans ta requêtes SQL : 'SELECT password [...]'
Dans la condition : $data['mot_passe']
Toujours dans la condition, d'où vient $pass ?
Pour finir, tu ne peux pas utiliser header() après l'envoie du texte au navigateur (cf. ligne précédente).
- Ligne 4 : Inutile
- Lignes 5 et 6 : Elles ne servent à rien
- Ligne 7 : copie de la ligne 3 : $pseudo est déjà protégée
- Ligne 8 : Il ne faut pas de point-virgule dans les structures conditionnelles
- Ligne 14 : On utilise deux slashes pour mettre une ligne en commentaire
Dans ta requêtes SQL : 'SELECT password [...]'
Dans la condition : $data['mot_passe']
Toujours dans la condition, d'où vient $pass ?
Pour finir, tu ne peux pas utiliser header() après l'envoie du texte au navigateur (cf. ligne précédente).
je sais pas du tout mais mon $ pass marche parfaitement...
avion-f16
Messages postés
19250
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
22 décembre 2024
4 505
12 mars 2011 à 19:31
12 mars 2011 à 19:31
L'option register_globals est sans doute activée sur ton serveur.
Je te conseille quand même de déclarer la variable comme tu l'as fais avec $pseudo, cette option n'est pas activée sur tous les serveurs.
D'ailleur, je te conseille aussi d'éviter cette option pour des raisons de sécurité.
Je te conseille quand même de déclarer la variable comme tu l'as fais avec $pseudo, cette option n'est pas activée sur tous les serveurs.
D'ailleur, je te conseille aussi d'éviter cette option pour des raisons de sécurité.
avion-f16
Messages postés
19250
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
22 décembre 2024
4 505
12 mars 2011 à 22:01
12 mars 2011 à 22:01
oui, et n'oublie pas de remplacer $_POST['pseudo'] par $_POST['pass']
<?php session_start(); $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); if($pseudo == "") { echo 'bien essayé mais ca marchera pas'; } else { mysql_connect('sql200.hebergratuit.com','rober_6835970','florian'); mysql_select_db('rober_6835970_codcmoh'); $sql = "SELECT password FROM membres WHERE pseudo='".$pseudo."'"; $req = mysql_query($sql) or die('Erreur SQL !'); $data = mysql_fetch_assoc($req); if($data['mot_passe'] == $_POST['password']) { header ('location: zonemembre.php'); } else { echo 'votre mot de passe est incorrect ou bien inconnu'; } } ?>
voila un code corrigé mais ca ne marche toujours pas . (ca me met toujours mon "bien essayé mais ca marchera pas"
y aurait il un probleme avec ma condition ??
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voici l'evolution de mon code :
<?php session_start(); $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); $password = md5(mysql_real_escape_string(htmlspecialchars($_POST['password']))); ?> <?php if(empty($pseudo)) { echo 'bien essayé mais ca marchera pas'; } else { //la connexion invisible bien sur $sql = "SELECT password FROM membres WHERE pseudo='".$pseudo."'"; $req = mysql_query($sql) or die('Erreur SQL !'); $data = mysql_fetch_assoc($req); if($data['password'] == $password) { echo 'Vous etes connecté'; header ('location: zonemembre.php'); } else { echo 'votre mot de passe est incorrect ou bien inconnu'; } } ?>
avion-f16
Messages postés
19250
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
22 décembre 2024
4 505
13 mars 2011 à 13:47
13 mars 2011 à 13:47
Salut.
- Pour utiliser mysql_real_escape_string(), une connexion à MySQL doit être active.
- Avant d'utiliser les variables $_POST, il faut vérifier si elles existent.
- Pour le pseudo, il faut également supprimer les espaces en début et fin avec trim()
- Il faut aussi vérifier si le membre existe sinon mysql_fetch_assoc() retournera false, donc $data['password'] n'existera pas, et tu auras une erreur "index is not defined"
- Pour des raisons de sécurité, j'ai pour habitude de n'afficher qu'un seul message en cas d'erreur, sans préciser si ce qui pose problème est le mot de passe ou si le membre n'existe pas.
Essaye avec ça :
https://gist.github.com/406ec42f9994c93cd2f0
(je ne l'ai pas testé avant, il peut y avoir des erreurs)
- Pour utiliser mysql_real_escape_string(), une connexion à MySQL doit être active.
- Avant d'utiliser les variables $_POST, il faut vérifier si elles existent.
- Pour le pseudo, il faut également supprimer les espaces en début et fin avec trim()
- Il faut aussi vérifier si le membre existe sinon mysql_fetch_assoc() retournera false, donc $data['password'] n'existera pas, et tu auras une erreur "index is not defined"
- Pour des raisons de sécurité, j'ai pour habitude de n'afficher qu'un seul message en cas d'erreur, sans préciser si ce qui pose problème est le mot de passe ou si le membre n'existe pas.
Essaye avec ça :
https://gist.github.com/406ec42f9994c93cd2f0
(je ne l'ai pas testé avant, il peut y avoir des erreurs)
Mihawk
Messages postés
4315
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
846
13 mars 2011 à 16:59
13 mars 2011 à 16:59
Hello,
Tu peux aussi utiliser des requêtes préparées avec la méthode bindParam qui te permet de définir le type de paramètre de ta requête (entier, string...) et d'éviter ainsi que les utilisateurs rentrent n'importe quoi !
Tu peux aussi utiliser des requêtes préparées avec la méthode bindParam qui te permet de définir le type de paramètre de ta requête (entier, string...) et d'éviter ainsi que les utilisateurs rentrent n'importe quoi !
avion-f16
Messages postés
19250
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
22 décembre 2024
4 505
13 mars 2011 à 19:49
13 mars 2011 à 19:49
Les requêtes préparées, à la base, ne sont pas conçues dans le but de sécuriser mais plutôt pour optimiser les performances.