Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2036 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Votre avis sur ce code de restriction d'accès

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Votre avis sur ce code de restriction d'accès

n°1870658
aspirateur
Posté le 07-04-2009 à 16:09:53  profilanswer
 

Bonjour,
 
J'aimerai avoir votre avis sur ce bout de code pour sécuriser l'accès à une section. Il fonctionne (je l'utilise) mais je me pose la question du niveau de sécurité.
 
Dans cet exemple les identifiants / mdp sont en clair dans la base SQL, un md5 suffit? Ou faut-il passer à plus costaud?
 
Donc, que pensez vous de ce code?
 
Merci
 

Code :
  1. if (isset($_POST['login']) AND  isset($_POST['pass']) AND $_POST['login']!= NULL AND $_POST['pass']!= NULL){
  2.     $_SESSION['login'] = $_POST['login'];
  3.     $_SESSION['pass'] = $_POST['pass'];
  4.  
  5. }
  6.     //on utilise enregistre les variables de la session dans d'autres variable
  7.     $login = $_SESSION['login'];
  8.     $pass= $_SESSION['pass'];
  9.  
  10.     $reponse = mysql_query("SELECT * FROM user WHERE login = '$login' " ); //requete qui va cherche l'utilisateur et le mot de passe
  11.     while ($donnees = mysql_fetch_array($reponse) )// On fait une boucle pour lister tout ce que contient la table :
  12.     {
  13.         $_SESSION['login'] = $donnees['login'];
  14.         $_SESSION['id_user'] = $donnees['id_user'];
  15.         $_SESSION['pass'] = $donnees['pass'];
  16.         $nom = $donnees['login'];
  17.         $passw = $donnees['pass'];
  18.     }
  19. if ($pass == $passw AND $passw != NULL) {
  20.     }
  21.     Else
  22.     {
  23.     header("Location: ".$url."identification.php" ); // on l'envoi se connecter sur la page qui va bien
  24.     $_SESSION['messageident'] = "Erreur d'identification, veuillez vérifier vos identifiants";
  25.     }

mood
Publicité
Posté le 07-04-2009 à 16:09:53  profilanswer
 

n°1870679
macgawel
Posté le 07-04-2009 à 16:42:13  profilanswer
 

Code :
  1. /*
  2. NE JAMAIS INJECTER DIRECTEMENT LES VARIABLES RECUPEREES PAR $_POST !!!
  3.  
  4. Au minimum, echapper les données reçues avec mysql_real_escape_string()
  5. */
  6. if (isset($_POST['login']) AND  isset($_POST['pass']) AND $_POST['login']!= NULL AND $_POST['pass']!= NULL){
  7.     $_SESSION['login'] = $_POST['login'];
  8.     $_SESSION['pass'] = $_POST['pass'];
  9.  
  10. }
  11.     //on utilise enregistre les variables de la session dans d'autres variable
  12. /*
  13. Mais si $_POST['login'] n'est pas défini (ou est nul) $_SESSION['login'] n'est pas défini
  14. => risque, au moins d'erreur...
  15. Autant utiliser directement les variables de session
  16. */
  17.     $login = $_SESSION['login'];
  18.     $pass= $_SESSION['pass'];
  19. /*
  20. Eviter le SELECT *
  21. Il vaut mieux preciser les colonnes qu'on va chercher.
  22. */
  23.     $reponse = mysql_query("SELECT * FROM user WHERE login = '$login' " );
  24. //requete qui va cherche l'utilisateur et le mot de passe
  25. /*
  26. Non, elle va juste chercher l'utilisateur
  27. */
  28.     while ($donnees = mysql_fetch_array($reponse) )// On fait une boucle pour lister tout ce que contient la table :
  29.     {
  30. /*
  31. Comme quoi ce n'était pas utile de commencer par mettre $_POST[login] dans la session !
  32. */
  33.         $_SESSION['login'] = $donnees['login'];
  34.         $_SESSION['id_user'] = $donnees['id_user'];
  35.         $_SESSION['pass'] = $donnees['pass'];
  36.         $nom = $donnees['login'];
  37.         $passw = $donnees['pass'];
  38.     }
  39. /*
  40. Pourquoi tu ne mets pas directement la condition sur le password dans la clause WHERE ?
  41. Comme ça, si la requête ne renvoie rien, c'est qu'il y a un pb avec login ou pwd.
  42. Et sinon, elle renvoie un unique enregistrement.
  43. Là, il y a un risque si plusieurs users ont le même login - ce qui ne devrait pas arriver...
  44. */
  45. if ($pass == $passw AND $passw != NULL) {
  46.     }
  47.     Else
  48.     {
  49.     header("Location: ".$url."identification.php" ); // on l'envoi se connecter sur la page qui va bien
  50.     $_SESSION['messageident'] = "Erreur d'identification, veuillez vérifier vos identifiants";
  51.     }

Pour ce qui est de la sécurisation du mot de passe, un md5 peut suffire (ça dépend aussi du type de site)...
Un petit "truc" pour sécuriser encore un peu le md5 : la méthode du grain de sel.
Il s'agit d'utiliser un "mot" que tu vas ajouter (d'une manière ou d'une autre) aux données à chiffrer.
Dans le cas d'un MD5, tu peux - par exemple - faire

Code :
  1. $salt = "un mot quelconque assez long. On s en fout c est juste pour rendre le cassage du md5 plus complique.";
  2. $pass_chiffre = md5($pass.$salt);


Tu stocke ça dans ta table.
Ensuite tu prends le mot de passe saisi par l'utlisateur, tu le "chiffre" de la même manière et tu compares avec ce qui est en base.

n°1870684
aspirateur
Posté le 07-04-2009 à 16:57:22  profilanswer
 

Merci pour cette réponse complète  :jap:  
 
Je vais suivre tes conseils pour améliorer le code.
 
Par contre la redirection par le "header" n'est pas risquée, on est d'accord?

n°1870710
Profil sup​primé
Posté le 07-04-2009 à 17:18:49  answer
 

tu la fais suivre d'exit :

Code :
  1. header('location: adresse.php');
  2. exit();


Autre chose : la boucle while est inutile, tu peux faire cette requête :

Code :
  1. SELECT * FROM TABLE WHERE login = '$login' AND password = '$password'


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Votre avis sur ce code de restriction d'accès

 

Sujets relatifs
SqlServer et Access - Besoin de votre avisextraire code sql d'une bdd sqlserver2000
Créer des accès sur un site[Réglé]Test à l'accès d'un fichier (savoir s'il est déjà ouvert)
Comment modiifier ce code pour avoir une recherche multiple?Un scanf() qui perturbe mon code
Comprendre code source : liens entre les fichiers[C#, Résolu] UserControl, classes en propriété et code du concepteur.
votre avis m'interesseInterdire Accès selon le Rôle
Plus de sujets relatifs à : Votre avis sur ce code de restriction d'accès


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR