votre avis sur la sécurité de ce script...

votre avis sur la sécurité de ce script... - PHP - Programmation

Marsh Posté le 11-02-2008 à 11:31:36    

Bonjour,

 

Pourriez vous me dire ce que vous pensez de la sécurité de ce script que j'ai créer qui permet de se loguer et protéger mes pages.

 

Le script de connexion

Code :
  1. <?php
  2. session_start();
  3. $_SESSION['logged'] = 0;
  4. include("".$_SERVER['DOCUMENT_ROOT']."/script_php/fonctions_php/fonction_racine.php" );
  5. if(!empty($_POST['login']) && (!empty($_POST['mdp']))) { 
  6. require("".$racine."/securite/sql/connexion_sql.class.php" );
  7. /*================ CONNEXION A LA BDD =============== */
  8. $connexion = new connexion_sql();
  9. $connexion = $connexion->connexion_PDO();
  10. /*=======================================================*/
  11. $login = trim($_POST['login']);
  12. $pass =  mhash(MHASH_SHA256, trim($_POST['mdp']));
  13. $page_precedente = $_POST['page_precedente'];
  14. $requete_prepare_log = $connexion->prepare("SELECT login, pass, droit FROM admin_membres WHERE login = :login" );
  15. $requete_prepare_log->execute(array(':login', => $login));
  16. if($utilisateur = $requete_prepare_log->fetch(PDO::FETCH_OBJ)) {
  17.   if($pass == $utilisateur->pass) {
  18.    $_SESSION['user'] = $utilisateur;
  19.    $_SESSION['ip_client'] = $_SERVER['REMOTE_ADDR'];
  20.    $_SESSION['HTTP_USER_AGENT'] = mhash(MHASH_SHA256, $_SERVER['HTTP_USER_AGENT']);
  21.    $_SESSION['logged'] = 1;
  22.    $_SESSION['iniated'] = true;
  23.    $requete_prepare_log->closeCursor();
  24.    header("Location:".$page_precedente."" );
  25.    die();
  26.   }
  27.   else {
  28.    $requete_prepare_log->closeCursor();
  29.    header("Location:".$racine_relatif."/admin/login.php?erreur=1" );
  30.    die();
  31.   }
  32. }
  33. else {
  34.  $requete_prepare_log->closeCursor();
  35.  header("Location:".$racine_relatif."/admin/login.php?erreur=1" );
  36.  die();
  37. }
  38. }
  39. else {
  40. header("Location:".$racine_relatif."/admin/login.php?erreur=2" );
  41. die();
  42. }
  43. ?>
 

La fonction a mettre en debut de chaque page

Code :
  1. function page_securite() {
  2. ini_set('session.use_trans_sid', 0);
  3. session_start();
  4. if (!isset($_SESSION['initiated'])) {
  5.     session_regenerate_id();
  6.     $_SESSION['initiated'] = true;
  7. }
  8. if(isset($_SESSION['logged'])) {
  9.  if($_SESSION['logged'] == 1) {
  10.   if(isset($_SESSION['ip_client']) && ($_SESSION['ip_client'] == $_SERVER['REMOTE_ADDR'])) {
  11.    if (isset($_SESSION['HTTP_USER_AGENT'])) {
  12.        if ($_SESSION['HTTP_USER_AGENT'] == mhash(MHASH_SHA256, $_SERVER['HTTP_USER_AGENT'])) {
  13.      if(isset($_SESSION['user'])) {
  14.       return true;
  15.      }
  16.     }
  17.    }
  18.   }
  19.  }
  20. }
  21. return false;
  22. }
 

Sur chaques pages

Code :
  1. if(!page_securite()) {
  2. header(Page d'erreur);
  3. die();
  4. }
  5. else {
  6. On affiche la page
  7. }
 


Je vais ajouter en plus de cela une gestion avec cookies qui me permettre de me souvenir de l'utilisateur.

 

Merci d'avance pour vos avis et critiques


Message édité par lilougirl8 le 11-02-2008 à 11:32:13
Reply

Marsh Posté le 11-02-2008 à 11:31:36   

Reply

Marsh Posté le 11-02-2008 à 12:31:54    

Sans juger la synthaxe et l'ergonomie du code, je trouve que la volonté de consolider la SESSION PHP via l'ip et user-agent est une bonne chose. :)

Reply

Marsh Posté le 11-02-2008 à 12:41:14    

merci c'est sympa, je compte rajouter un compteur d'attaque en cas de mauvais mot de passe.
 
Par contre, je veux mettre un en place un système de cookie comme indiqué plus haut, comment ça se passe concrètement quand je créer le cookie?
 
Voila ce que je pensai faire :  
 
Lorsque l'utilisateur se connect et que tout c'est bien passé : je créer le cookie login, le cookiee mot de passe,  
 
- Quand l'utilisateur revien sur la page, si le cookie login et pass existe, je vérifie qu'il soit valide (en faisant une requete) et je le connecte automatiquement.
 
C'est ça qu'il faut faire?? j'ai l'impression que il faudrait peut etre augmenter la sécurité à ce niveau la

Reply

Marsh Posté le 11-02-2008 à 12:41:31    

pas forcément ... L'UA est facilement modifiable et l'IP peut être masquée ... Donc imo, cela apporte certes un plus mais qui n'est pas synonyme de palier de sécurité.
 
D'autre part, perso je ne vois pas l'intérêt de faire un SELECT pour rapatrier le mot de passe : il vaut mieux imo le laisser dans la BDD (d'autant plus qu'à en lire le script, il n'a pas l'air d'être vérifié à l'heure actuelle)


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 11-02-2008 à 12:49:55    

Voilà j'ai rectifier c'est bien ça que tu ma conseillé??

 
Code :
  1. $requete_prepare_log = $connexion->prepare("SELECT login, droit FROM membres WHERE login = :login AND pass = :pass" );
  2. $requete_prepare_log->execute(array(':login' => $login, ':pass' => $pass));
  3. if($utilisateur = $requete_prepare_log->fetch(PDO::FETCH_OBJ)) {
  4.   $requete_prepare_log->closeCursor(); //On ferme le curseur
  5.    $_SESSION['user'] = $utilisateur;
  6.    $_SESSION['ip_client'] = $_SERVER['REMOTE_ADDR'];
  7.    $_SESSION['HTTP_USER_AGENT'] = mhash(MHASH_SHA256, $_SERVER['HTTP_USER_AGENT']);
  8.    $_SESSION['logged'] = 1;
  9.    $_SESSION['iniated'] = true;
  10.    $duree_cookie = time() + 31536000; // valable un an    
  11.    setcookie(); //Cookie Login
  12.    setcookie(); // Cookie Mot de passe
  13.    header("Location:".$page_precedente."" );
  14.    die();
  15. }
  16. else {
  17.  $requete_prepare_log->closeCursor();
  18.  header("Location:".$racine_relatif."/admin/login.php?erreur=1" );
  19.  die();
  20. }
  21. }
  22. else {
  23. header("Location:".$racine_relatif."/admin/login.php?erreur=2" );
  24. die();
  25. }
  

EDIT : MERCI NazzTazz, erreur Corrigée


Message édité par lilougirl8 le 11-02-2008 à 13:01:24
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed