Connexion bbd - password utilisateur (sha1) - connexion

Fermé
antho861 Messages postés 4 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 2 septembre 2016 - Modifié par NHenry le 2/09/2016 à 21:37
NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 - 3 sept. 2016 à 00:03
Bonjour (j'ai essayé de faire un résumé de mon probleme dans le titre désolé si c'est un peu tiré par les cheveux).


Voila j'ai ma base de donnée avec donc ma table admin, le login admin, et le mdp admin convertit donc en SHA1.

Lorsque j'essaye donc de me connecter il verifie bien que mon password est bien entré (vous allez voir dans le code ci joint) mais apparement (je suppose) le mdp ne se convertit pas bien je sais pas enfin voila le code :

<?php

$bdd = new PDO('mysql:host=localhost;dbname=camping;charset=utf8', 'root', '');

 $nomLogin = $_POST['login'];
 $passpwd = $_POST['pwd'];
 //$shapwd = sha1($passpwd);
 $login_valide = $bdd->query("SELECT login FROM admin WHERE login = $nomLogin");
 $pwd_valide = $bdd->query("SELECT password FROM admin WHERE password = SHA1('$passpwd')");

 // on teste si nos variables sont définies
 if (isset($nomLogin) && isset($passpwd)) {

  // on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe
  if ($login_valide == $nomLogin && $pwd_valide == sha1($passpwd)) {
   // dans ce cas, tout est ok, on peut démarrer notre session

   // on la démarre :)
   session_start ();
   // on enregistre les paramètres admin comme variables de session ($login et $pwd)
   $_SESSION['login'] = $nomLogin;
   $_SESSION['pwd'] = sha1($passpwd);

   // on redirige l'admin vers la page administration
   header ('location: ../administration/administration.php');
  }
  else {
   echo '<body onLoad="alert(\'Informations incorrectes\')">';
   
   echo '<meta http-equiv="refresh" content="0;URL=../index.php">';
  }
 }
 else {
  echo 'Les variables du formulaire ne sont pas déclarées.';
 }

?>

EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.


Merci pour votre aide.
A voir également:

3 réponses

NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 345
Modifié par NHenry le 2/09/2016 à 21:45
3 choses :
- As-tu penser à échapper les chaines récupérées de $_POST['pwd'] pour éviter les injections SQL ?
- Penses à "saler" ton mot de passe.
- Pourquoi enregistrer le mdp dans la session, juste mémoriser l'ID de l'utilisateur est suffisant, non ?

Essayes peut être de calculer le MDP avant de l'injecter dans la requête.

Et sinon pourquoi faire 2 requêtes ?
SELECT * FROM admin WHERE login = '$nomLogin' AND password = SHA1('$passpwd')

(tu as oublié les ' autour de $nomLogin)

Car avec tes 2 requêtes, un utilisateur peut usurper n'importe qui, si il a un mdp (pas de lien utilisateur/mdp direct avec ton code)

J'interviens principalement en VB6 et VB.NET, avec un peu de C#, mais la modération m'amène souvent sur d'autre langages.
En VB.NET pensez à activer "Option Explicit" et "Option Strict"
0
antho861 Messages postés 4 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 2 septembre 2016
2 sept. 2016 à 21:54
Je t'avoue que j'ai regarder un tutoriel ( mes cours au centre de formation on été trop succinct ce qui m'ennuie un peu)

Pour la sécurité et éviter les chaînes je n'y ai pas penser car sur le moment penser à ça... Et je t'avoue je saurais peut être pas le faire ou je regarderai sur internet.

Pour le salt j'ai entendu parler pour le md5 mais j'avais pas trop compris et vu que je suis en sha1 j'ai pas chercher...

C'est la toute première fois que j'utilise reelement lez session et cookie... Et j'ai un peu de mal avec tout ça

Faire deux requêtes c'était pour comparer et le login et puis le mot de passe mais c'est vrai que c'est un peu inutile... Je me suis un peu tâter mais dans le tutoriel il faisait comme ça ( enfin lui le login et mdp étaient en dur)

Oui je l'avais calculer tu vois en commentaire et ça n'avait pas marcher du coup j'ai voulu changée de stratégie...

Je te remercie de ton aide
0
NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 345
2 sept. 2016 à 22:01
As-tu ton code d'ajout, histoire de comparer d'où peut venir la différence ?
0
antho861 Messages postés 4 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 2 septembre 2016
2 sept. 2016 à 22:08
Tu veux dire pour la connexion ?

C'est juste un

<input type="text" name="login" />

<input type="password" name="pwd" />

Sinon si tu parlez du tutoriel


http://www.lephpfacile.com/cours/18-les-sessions
0
NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 345
2 sept. 2016 à 23:17
Comment as-tu ajouté ton utilisateur dans ta base de données (INSERT INTO) ?
0
antho861 Messages postés 4 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 2 septembre 2016 > NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024
2 sept. 2016 à 23:41
Je l'ai ajouté manuellement dans mysql
0
NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 345
3 sept. 2016 à 00:03
Ok, donc je vais lister les quelques points :

- Je ne sais pas ce que tu as mis dans ta base de données comme information d'utilisateur/mdp, mais cela importe peu.
- Entre une identification via des identifiants en BDD et en dur dans le code, ça dépend du besoin, mais souvent c'est la base de données qui est le plus intéressant.
- Il faut que tu récupères les données de l'utilisateur (comme je le suggère avec ma requête SQL), si il n'y a pas de données retournées, c'est que l'identifiant n'est pas bon.
- Je te conseil d'aller voir un tutoriel sur PDO, car tu t'y prends mal pour récupérer les données de tes requêtes SQL.
- Regarde aussi sur ce tutoriel comment faire des requêtes paramétrées, cela évite les injections SQL.
- Le "sel" permet d'éviter de pouvoir retrouver un mdp à partir d'une rainbow table, que ce soit MD5 (déconseillé maintenant), SHA* ou plus généralement, tout algorithme de hashage.
- Dans la session on ne stock que les données utiles, le MDP n'est pas utile, et potentiellement, peut causer une fuite de données, donc en session, tu peux stocker le pseudo de l'utilisateur et son ID pour le retrouver plus facilement esuite.

Pour l'ajout de l'utilisateur, je te conseil de te faire un bout de code, cela te permettra d'avoir une bonne méthode de calcul.

Avec ton état actuel, tu peux toujours faire un UPDATE ... SET ... WHERE ...
En mettant ton MDP déjà hashé en paramètre.
0