Vérification de login via hash md5

Soyez le premier à donner votre avis sur cette source.

Snippet vu 20 483 fois - Téléchargée 27 fois


Contenu du snippet

Bah voila, dans ma nuit, je me suis posé une question (depuis la source de Coucou d'ailleurs !) : Comment peut-on réussir à ne plus se faire chier entre les addslashes et autres ?
Et la, une idée m'est venue : l'utilisation d'un hash.
Que ce soit via MD5, SHA-1, ou un moyen de cryptage quelconque, tous les caractères de type ' \ * # risquaient fort bien de disparaitre dans le hash !
Alors, j'ai fais ce bout de code avec du hash MD5, mais il vaut mieux que vous preniez autre chose ( SHA-1 est un peu plus sécurisé du haut de ces 40 bits :p).
Voila comment j'ai fais :

Source / Exemple :


<?php
 function login($login, $password) {
  
   if ( strlen($login) < 4 ) return false; // Si le login est inférieur à 4 charactères, on arrète tout.
  
  $password = md5($password);
  $login = trim($login);

// Le plus important : la commande de query. J'utilise strtolower pour supprimer la casse.
  $query = mysql_query("SELECT COUNT(*) FROM users WHERE MD5(login) = '".md5($login)."' AND password = '".$password."' ");
  $data = mysql_fetch_row($query);
  
// Si il existe un enregistrement (le login étant unique pour chaque personne), alors c'est bon :)
  return ( $data[0] == 1 ) ? true : false;
  
 }

// Si le formulaire est soumis
 if ( isset($_POST['submit']) ) {
      if ( login($_POST['login'], $_POST['password'] ) { // Si la fonction ci-dessus est TRUE (vrai)
           session_start();
           $_SESSION['logged_in'] = true; // On met ca en session
           header('Location: private.php');
           die(); // Etre sûr que la fin de cette page ne sera pas pris en compte
      } else {
           $warning = 'Le couple login/password que vous avez entrez est incorrect'; // si la fonction renvoit false, on se fait une variable d'erreur
      }
 }

 if ( isset($warning) ) { // Test de présence de la variable d'erreur
  echo '<p>'.$warning.'</p>';
 }

// Affichage du formulaire 
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<fieldset>
 <legend>Login</legend>
 <label for="login">Login :</label>
 <input type="text" name="login" id="login"/>
 <label for="password">Mot de passe :</label>
 <input type="password" name="password" id="password"/>
 <input type="submit" name="log" value="Se connecter"/>
</fieldset>
</form>

Conclusion :


Alors par contre, je n'ai pas eu le temps de le tester, car mon serveur apache connait quelque problème en local chez moi. Je poste quand même la source, si quelqu'un trouve mieux ou alors me dit que ca marche pas, au moins je serais fixé :)

voila :)

PS : J'ai peut-être fait une erreur de placement etre MD5() et LOWER() et entre md5() et strtolower(). Je sais plus dans quel ordre PHP lit =)

A voir également

Ajouter un commentaire

Commentaires

doudou3158
Messages postés
108
Date d'inscription
mercredi 29 juin 2005
Statut
Membre
Dernière intervention
12 mai 2007
-
Euh juste comme ça mais il manque une parenthèse ligne 14.
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
" Voui, mais ca t'oblige à réécrire une fonction pour en faire fonctionner 2 sur une même variable =)" ? je te suis pas là

ma méthode c'est ça :

vérification get_magic_quote_gpc()
utilisation d'addslashes() le cas échéant
vérification login sql + vérification login php

c'est tout.
FhX
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3 -
Voui, mais ca t'oblige à réécrire une fonction pour en faire fonctionner 2 sur une même variable =)
Donc, est-ce que tu y gagnes vraiment ? Quelle manière est la plus rapide ?
Alors la, j'en sais rien :D

Parce que avec ma méthode :
vérification hash login sql + vérification hash login php
(je ne compte pas le mot de passe qui est lui de toute facon hashé)

La méthode d'Antho (à quelques chose près) :
vérification get_magic_quote_gpc()
utilisation d'addslashes() le cas échéant
utilisation de mysql_real_escape_string() (optionnel)
vérification login sql + vérification login php

Ce que je peux faire très simplement, on peut le faire avec un peu plus de volonté chez Antho ;)
Par contre, je connais pas au niveau temps de traitement ce que ca donne, il se peut que ma méthode soit "largement" plus longue à traiter.
A voir :)
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
C'est sûr, enfin perso je n'ai jamais rencontré de problèmes avec addslashes :-) (et au pire quand on fait une fonction myaddslashes on peut tout à fait mettre un mysql_[real_]escape_string() après :-)
malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Je suis d'accord avec FhX (je sais, c'est inutile comme commentaire, lol, mais j'avais envie de le dire).
mysql_real_escape_string () est en remation plus étroite avec mysql. Dès fois qu'un jour les développeurs de mysql décident de changer les caractères devant être échappés, cette fonction sera mise à jour très vite. addslashes () ne le sera peut-être pas, puisque n'étant pas dédiée.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.