Mes sessions, question de sécurité...

Mes sessions, question de sécurité... - PHP - Programmation

Marsh Posté le 25-04-2005 à 13:46:19    

Voila, je débute en php (ca vous cadre deja, non ?).
J'essaye de monter un site simple, et je commence par préparer l'architecture avant d'aller plus loin. J'entend par la une page d'administration d'ou l'on pourra poster des articles via formulaire... J'en suis a la mise en place de l'accès administration:
 
1- Stockage du login/pass d'administration dans une table sql
2- Récuperation du login/pass via formulaire
3- Comparaison avec ceux de la bdd, si ok...
4- Création d'une session, et redirection vers la page d'admin...
 
Bon je suis pas trop au point au niveau des sessions (et comment elles sont gérées par défaut sur free). Voici le début de mon code, bien sur l'est crado, mais j'arrete pas de retoucher de partout...
 
Veriflogin.php (=réception du formulaire et création de la session)

Code :
  1. <?php
  2. include("config.php" );
  3. $Touvabien = false
  4. if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) )
  5. {
  6.   extract($_POST);
  7.   $sql = "SELECT pseudo, mdp FROM blog_admin WHERE pseudo = '".addslashes($login)."'";
  8.   $req = mysql_query($sql) or die('Erreur SQL');
  9.   if (mysql_num_rows($req) > 0)
  10.   {
  11.   $info = mysql_fetch_assoc($req);
  12.      if ($password == $info['mdp'])
  13.  {
  14.      $Touvabien = true;
  15.      }
  16.   }
  17. }
  18. // Mise en session après validation
  19. if ($Touvabien) {
  20.     session_start();
  21.     $_SESSION['login'] = $login;
  22. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  23. echo '<p>Vous etes en mode admin !!';
  24. echo '<a href="admin.php>Panneau d\'administration</a>';
  25.  
  26. }
  27. else {
  28.  
  29.    echo '<p>Vous avez oublié de remplir un champ.</p>';
  30.    include('index.php');
  31.    exit;
  32. }
  33. ?>


 
 
admin.php (=page d'administration "sécurisée" )

Code :
  1. <?php
  2. session_start();
  3. if(!isset($_SESSION['login']) && (!isset($_SESSION['ip']))) {
  4.   echo 'Vous n\'êtes pas autoriser à acceder à cette zone';
  5.   include('index.php');
  6.   exit;
  7. }
  8. else
  9. {
  10. echo "Welcome aboard!";
  11. }
  12. ?>


 
 
Alors ? C'est sécurisé ? Bof ?

Reply

Marsh Posté le 25-04-2005 à 13:46:19   

Reply

Marsh Posté le 25-04-2005 à 13:52:16    

non mais je me demande comment un fonction comme extract peux exister...
c'est encore plus dangereux que le register_globals a on [:mlc]


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 25-04-2005 à 13:57:44    

ah...
c'est dangereux en cas d'intrusion de caractères/codes dangereux dans le formulaire j'imagine ?  
Je devrais utiliser quelle méthode dans ce cas -_-

Reply

Marsh Posté le 25-04-2005 à 14:04:14    

j'ai jamais compris pourquoi on faisait allusion aux register_global à ON à chaque fois qu'on parle de securité. qqn peut faire un court aparté dessus pour je capte le truc svp, je debute aussi?

Reply

Marsh Posté le 25-04-2005 à 14:05:40    

non c'est dangereux car ca permet a quelqu'un de mal intentioné d'ecraser des variables... (ici, il pourrait ecraser la valeur de $Touvabien)
 
autant directement utiliser le tableau $_POST


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 25-04-2005 à 14:18:41    

Pourrais tu developper tes deux idées ? :p
J'aimerais comprendre comment techniquement il est possible d'écraser (comme tu dis) la variable...
 
En fait je n'arriverait pas a voir quoi faire tant que je comprendrait pas comment il est possible d'outrepasser la sécurité (j'imagine qu'il y a plusieurs facons, si vous pouviez les décrire).

Reply

Marsh Posté le 25-04-2005 à 14:41:17    

Comme l'a dit KangOf, il suffit d'envoyer un "Toutvabien=true" en post a ta page pour etre logue ...
 
exemple :

Code :
  1. <form method="post" action="veriflogin.php">
  2. <input type="hidden" name="Toutvabien" value="true" />
  3. <input type="text" name="login" value="foo" />
  4. <input type="text" name="password" value="bar" />
  5. <input type="submit" name="Submit" value="ok" />
  6. </form>


 
Et puis bon, stocker en clair les mots de passe dans la base, je trouve pas ca tres secure ...


Message édité par cerel le 25-04-2005 à 14:44:37
Reply

Marsh Posté le 25-04-2005 à 14:43:10    

je vois
mais, d'une comment qqun pourrait il connaitre l'existance d'une variable touvabien ??!
Pour le mdp, j'me suis dis la meme chose, mais faut bien stocker le mdp qquepart non ?

Reply

Marsh Posté le 25-04-2005 à 14:45:46    

gnarky a écrit :

je vois
mais, d'une comment qqun pourrait il connaitre l'existance d'une variable touvabien ??!
Pour le mdp, j'me suis dis la meme chose, mais faut bien stocker le mdp qquepart non ?


 
Ton mot de passe tu le stocke en crypte dans ta base.
Une fois que l'user veut se loguer, tu cryptes le password qu'il t'envoie. Si les deux versions cryptees sont les memes, alors les password initaux etaient les memes.
 
Voila, pas besoin de password en clair dans ta base.

Reply

Marsh Posté le 25-04-2005 à 14:49:40    

le cryptage md5 est conseillé ? ou y a mieux ?

Reply

Marsh Posté le 25-04-2005 à 14:49:40   

Reply

Marsh Posté le 25-04-2005 à 15:13:08    

Pour revenir à l'intrusion de la variable Toutvabien (true) en post... Je suis allé voir le manuel, pour la fonction extract(), j'ai reperé des options:

Citation :


EXTR_SKIP
    Lors d'une collision, ne pas réécrire la variable existante.


 
Si je fais  

Code :
  1. extract($_POST, EXTR_SKIP);


 
La variable $Toutvabien déterminé juste avant l'extraction ne sera pas modifiée... J'ai juste ? C'est ptet en carton ca non ?

Reply

Marsh Posté le 25-04-2005 à 15:16:11    

Laisse tomber, c'est absolument pas bien [:spamafote]

Reply

Sujets relatifs:

Leave a Replay

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