Vérification de login via hash md5


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

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.