[PHP] ma technique d'identification est elle assez sécurisée ?

ma technique d'identification est elle assez sécurisée ? [PHP] - PHP - Programmation

Marsh Posté le 16-06-2002 à 19:17:57    

salut,
je fais appel à vous pour que vous donniez votre avis.
Je programme une application de galerie d'images en ligne (PhpWebGallery pour ceux qui connaissent :D ) et je revois mon système d'identification. Avant, je fonctionnais par cookie, mais ce n'était pas bien pour plusieurs raisons... donc j'ai voulu abandonner l'utilisation de cookie.
Voici comme je fonctionne maintenant :
1. l'utilisateur se entre son login + mot de passe, je teste si le couple est le même que celui de la base de données (le mot de passe est stocké en md5 dans la base)
2. si le mot de passe est bon, je créé un identifiant de session composé de 4 caractères (paramétrable) avec 62 possibilités pour chaque caractère, donc 62 puissance 4 possibilitées.
3. j'écris dans la table des sessions l'identifiant de session avec l'id de l'utilisateur, la date d'expiration (par défaut à 30 minutes) et l'adresse IP de la personne qui créé la session !
4. sur chaque page je teste si l'identifiant de session est existant, non expiré, correspondant bien à la bonne IP
 
Vous en pensez koi ? C'est une passoire comme système ?


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 16-06-2002 à 19:17:57   

Reply

Marsh Posté le 16-06-2002 à 19:29:17    

autant stocker dans un cookie le pseudo et le mdp (en md5 éventuellement) et vérifier sur chaque page. là c sûr à 100%
 
ton système peut poser pb en cas de proxy où plusieurs utilisateurs seront derrière la même adresse ip donc en récupérant l'identifiant de session de qqun, on peut se faire passer pour lui.

Reply

Marsh Posté le 16-06-2002 à 19:33:52    

siewn a écrit a écrit :

autant stocker dans un cookie le pseudo et le mdp (en md5 éventuellement) et vérifier sur chaque page. là c sûr à 100%
 
ton système peut poser pb en cas de proxy où plusieurs utilisateurs seront derrière la même adresse ip donc en récupérant l'identifiant de session de qqun, on peut se faire passer pour lui.  




je ne veux plus passer par cookie, refus absolu !
 
Oui, tu as raison pour ce que tu dis, s'ils sont plusieurs derrière le même proxy et que le second trouve l'id de session assez rapidement, il peut se logguer... en admin si le mec initial est un admin, mais bon, ça reste peu probable, non ?


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 16-06-2002 à 19:42:30    

C'est vrai que j'ai été confronté a ce probleme moi aussi, mais c'est peu probable...je suis resté a un systeme par les IPs.
peut etre pourrait on stocker autre chose avec l'ip qui puisse distinguer différents users derriere un proxy.
Mais je n'aime pas les cookies car souvent les gens les désactivent

Reply

Marsh Posté le 16-06-2002 à 19:44:39    

Ace17 a écrit a écrit :

Mais je n'aime pas les cookies car souvent les gens les désactivent



moi c'est encore plus que ça... les gens peuvent installer PhpWebGallery sur n'importe kel serveur web, parfois derrière un firewall... et là, t'oublies complètement les cookies... c'est trop lourd les cookies à gérer pour PhpWebGallery.
 
Pour siewn : avant je stockait login+md5(password) dans le cookie.


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 16-06-2002 à 20:04:19    

Pour l'identifiant de session, crée en plutôt un de 32 octets... genre tu fais un md5 sur le retour de la fonction microtime (temps en micro seconde).
 
Et puis pour le coup du mdp en md5 dans un cookie, ce n'est pas plus ou moins sûr qu'un identifiant de session. D'ailleurs mettre le mot de passe en md5 dans le cookie implique que si quelqu'un le récupère, il aura tout son temps pour le cracker dans son coin... un id de session ayant une durée de vie limitée, ça réduit le risque.

Reply

Marsh Posté le 16-06-2002 à 21:13:01    

Tentacle a écrit a écrit :

Pour l'identifiant de session, crée en plutôt un de 32 octets... genre tu fais un md5 sur le retour de la fonction microtime (temps en micro seconde).



ma fonction de création de l'identifiant de session est bien meilleure qu'un simple md5 sur microtime. Pourkoi ?
1. parce que microtime ne renvoie des chaînes ne contenant des caractères à 15 possibilités (contre 62 ! pour la mienne).
2. il suffit au cracker de savoir à quel moment la session a été créée pour trouver l'id de session, ma méthode est basée sur un md5 de microtime + motclef inconnu puis un random pour chaque caractère :

Code :
  1. function generate_key()
  2. {
  3.  global $conf;
  4.  $md5 = md5( substr( microtime(), 2, 6 ).$conf['session_keyword'] );
  5.  $init = "";
  6.  for ( $i = 0; $i < strlen( $md5 ); $i++ )
  7.  {
  8.   if ( is_numeric( $md5[$i] ) )
  9.   {
  10.    $init.= "$md5[$i]";
  11.   }
  12.  }
  13.  $init = substr( $init, 0, 8 );
  14.  mt_srand( $init );
  15.  $key = "";
  16.  for ( $i = 0; $i < $conf['session_id_size']; $i++ )
  17.  {
  18.   $c = mt_rand( 0, 2 );
  19.   if ( $c == 0 )
  20.   {
  21.    $key .= chr( mt_rand( 65, 90 ) );
  22.   }
  23.   elseif ( $c == 1 )
  24.   {
  25.    $key .= chr( mt_rand( 97, 122 ) );
  26.   }
  27.   else
  28.   {
  29.    $key .= mt_rand( 0, 9 );
  30.   }
  31.  }
  32.  return $key;
  33. }


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 16-06-2002 à 21:14:46    

mais y'a un truc que je comprends pas.
pkoi t'utilises pas simplement le sessid crée automatiquement par php ?

Reply

Marsh Posté le 16-06-2002 à 21:16:25    

je n'utilise pas le systeme standard pour cause d'incompatibilité selon les hébergeurs... mais le système standard utilise des id de session de 32 caractères je crois, contre seulement 4 par défaut pour moi !


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 16-06-2002 à 21:18:33    

tu crée toi même les sessions ?
pas trop la merde d'ajouter le sessid tout le temps sur chaque lien ?

Reply

Marsh Posté le 16-06-2002 à 21:18:33   

Reply

Marsh Posté le 16-06-2002 à 21:20:05    

Code :
  1. function add_session_id_to_url( $url )
  2. {
  3.  global $page;
  4.  if ( ereg( "\?" ,substr ( strrchr($url,"/" ), 1, strlen ( $url ) ) ) )
  5.  {
  6.   //echo $page['session_id']."<br />";
  7.   return $url."&id=".$page['session_id'];
  8.  }
  9.  else
  10.  {
  11.   return $url."?id=".$page['session_id'];
  12.  }
  13. }


add_session_id_to_url( "./diapo.php?cat=".$sub_row['id']."&expand=".$HTTP_GET_VARS['expand'] )


Message édité par z0rglub le 16-06-2002 à 21:21:10

---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 17-06-2002 à 00:08:28    

Mais le fait de ne sortir qu'un id de 4 caractères reste toujours faible... 65^4 reste encore 'faible' mais bon si c'est configurable :)

Reply

Marsh Posté le 17-06-2002 à 07:43:09    

Tentacle a écrit a écrit :

Mais le fait de ne sortir qu'un id de 4 caractères reste toujours faible... 65^4 reste encore 'faible' mais bon si c'est configurable :)  




oui, je dirais que c vrai pour une application classique, mais pour une appli web, où il faut faire des requêtes sur le serveur, ça fait

4 caractères :        14 776 336 possibilités
5 caractères :       916 132 832 possibilités
6 caractères :    75 418 890 625 possibilités
7 caractères : 3 521 614 606 208 possibilités


 
à trouver en 1800 secondes donc 8209 clefs par secondes pour 4 caracctères (aucun serveur ne peut répondre aussi vite !)
mais c configurable, on peut s'amuser à mettre 10 minutes et une id sur 10 carctères


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 17-06-2002 à 16:33:49    

:bounce: d'autres avis ?


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 17-06-2002 à 19:34:38    

z0rglub a écrit a écrit :

:bounce: d'autres avis ?  




 
non mais une question... l'id est envoyé par méthode POST ou GET ?  
T'as raison de dire que 4 caractères, ça fait un nombre de possibilités assez grand, mais il reste toujours le problème d'une personne qui regarde ce que fait une autre (ça tombe dans la paranoia... mais bon :) ) et si l'id est transmis en GET, il est alors assez facile de mémoriser 4 caractères.
(je cherche la bêbête je sais, mais c'est bien pour ça que tu as posté ce message ;p

Reply

Marsh Posté le 17-06-2002 à 20:03:04    

ok, tu as raison de chercher la petite bête, c'est le but du topic. Alors en effet, 4 caractères ou 50, si le "pirate" trouve l'id de session, qui passe en clair dans l'URL, alors, il peut accéder à la session de l'autre, à 2 condition :
1. être rapide, car la session a une durée limitée
2. avoir la même IP
 
Pour le 2eme point, en fait je vérifie juste $REMOTE_ADDR, est-ce que c'est mauvais, est ce que le "pirate" peut simuler $REMOTE_ADDR ? (à condition qu'il connaisse l'IP de la personne qui possède la session en question)


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 17-06-2002 à 20:06:58    

z0rglub a écrit a écrit :

ok, tu as raison de chercher la petite bête, c'est le but du topic. Alors en effet, 4 caractères ou 50, si le "pirate" trouve l'id de session, qui passe en clair dans l'URL, alors, il peut accéder à la session de l'autre, à 2 condition :
1. être rapide, car la session a une durée limitée
2. avoir la même IP
 
Pour le 2eme point, en fait je vérifie juste $REMOTE_ADDR, est-ce que c'est mauvais, est ce que le "pirate" peut simuler $REMOTE_ADDR ? (à condition qu'il connaisse l'IP de la personne qui possède la session en question)  




 
Je ne te parle pas tellement d'un pirate... mais genre un collègue de bureau mal intentionné... 4 caractères, c'est hyper facile à retenir (50 c'est tout de même moins facile) et surtout il aura la même IP. voilà :)  
(de toute façon on peut toujours trouver une faille... aucun système n'est sûr ... )
 
Pour le coup de simuler une IP, oui c'est possible mais il ne récupèrera pas le retour de la requête.

Reply

Marsh Posté le 17-06-2002 à 20:11:38    

tu me diras, le collègue "pirate" peut toujours se mettre sur le même poste et réutiliser une adresse via l'historique dans le navigateur... par contre, le collègue qui regarde par dessus l'épaule pour voir l'id de session, j'y avais pas pensé, et c vrai que du coup, 4 caractères, c'est pas énorme ! (heureusement que c'est paramétrable !


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 17-06-2002 à 20:15:05    

z0rglub a écrit a écrit :

tu me diras, le collègue "pirate" peut toujours se mettre sur le même poste et réutiliser une adresse via l'historique dans le navigateur... par contre, le collègue qui regarde par dessus l'épaule pour voir l'id de session, j'y avais pas pensé, et c vrai que du coup, 4 caractères, c'est pas énorme ! (heureusement que c'est paramétrable !  




 
un jour je m'étais imaginé regénérer l'id à chaque requête mais il ne faut pas que le client visite ton site avec plusieurs fenêtre sinon  :cry:  
 
Pour le coup de réutiliser une adresse via l'historique... si l'utilisateur pense bien à se déloguer de ton site (tu effaces l'id quoi), il n'y a pas de problème.

Reply

Marsh Posté le 17-06-2002 à 20:32:34    

en fait les utilisateurs ne se deloggues pas... l'id est périmé au bout d'un certain temps (30 minutes par défaut)


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 17-06-2002 à 20:44:50    

z0rglub a écrit a écrit :

en fait les utilisateurs ne se deloggues pas... l'id est périmé au bout d'un certain temps (30 minutes par défaut)  




 
bah tu pourrais leur proposer une bouton pour se déloguer, ça évitera que quelqu'un utilise l'historique.

Reply

Marsh Posté le 17-06-2002 à 21:46:35    

y'en a 1, mais je peux pas les forcer à l'utiliser...


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 17-06-2002 à 22:02:09    

z0rglub a écrit a écrit :

y'en a 1, mais je peux pas les forcer à l'utiliser...  




non c'est vrai :)

Reply

Marsh Posté le 17-06-2002 à 22:57:34    

Bonjour je vais devoir faire un site avec acces utilisateur par mdp. Je suis tombé sur votre topic et ca me concerne pas mal. J'avoue que je me suis pas encore posé le problème et la ya beaucoup d'information d'un coup.
 
Qqun pourrait me faire un resumé des problemes posés par les sessions et qques systemes pour gerer tout ca ?
 
Comme je disais j'ai pas trop réfléchi, mais pkoi pa un cookie qui s'efface a la cloture de la fenetre comme ca on se traine pas un id dans les liens et plus de trace une fois fini ?! Dites moi ce qui pose probleme, j'avoue que je ne vois pas toutes les subtilités, il doit y en avoir

Reply

Marsh Posté le 17-06-2002 à 23:03:51    

les cookies, c'est chiant parce que :
- tous les surfeurs ne les acceptent pas, alors pour les identifications c moyen !
- tous les serveurs ne les font pas marcher parfaitement, par exemple si le serveur est derrière un firewall...
- de plus, on ne peut pas faire ce que tu suggère, cad supprimer le cookie à la sortie du surfeur...
 
les sessions par identifiants dans l'URL permettent de contrer les pb posés par les cookies, mais dans le même temps, la gestion est un peu plus chiante... et on voit l'identifiant de session dans l'URL.


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 17-06-2002 à 23:16:14    

Pour ce qui est d'effacer un cookie lorsque le navigateur se ferme, j'ai trouvé ça sur un site :
 

Code :
  1. <?php
  2. // Envoi d'un cookie qui disparaitra après la fermeture du navigateur
  3. SetCookie("CcmUserSessionCookie","$login:$pass" );
  4. ?>


 
Sinon pour les methodes de transmission dans l'url, c'est quoi les problemes ? En fait quand l'utilisateur se loggue, il a un id qui est composé a partir de son pseudo et de son pass, mais il suffit de copier cet id (a partir de l'url) pour pouvoir utilisier son compte ou alors il change a chaque session ?


Message édité par Masure le 17-06-2002 à 23:16:34
Reply

Marsh Posté le 17-06-2002 à 23:18:34    

il est valable un temps assez court de préférence, il faut que l'utilisateur s'identifie pour en obtenir un nouveau


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 17-06-2002 à 23:23:09    

question stupide : mais si le gars reste en ligne pdt 30mn et que son id expire au bout de 20mn, le gars doit se re-id alors qu il surfait peinard ?

Reply

Marsh Posté le 17-06-2002 à 23:24:56    

réponse : oui


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 17-06-2002 à 23:27:41    

mais c trop trop nul !
 
comment ils font les sites "pro" pour etre bien securises et faire beneficier le surfer d'une belle session ? il doit bien y avoir une solution qd meme !

Reply

Marsh Posté le 17-06-2002 à 23:30:44    

et bien, ils utilisent des cookies... c'est une très bonne méthode qd tu es sûr que ton serveur les fera marcher, mais mon appli doit pouvoir s'installer sur n'importe quel serveur, donc ça pose parfois pb !


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 17-06-2002 à 23:31:50    

oki, sinon pour mon cookie qui est supprimé quand le navigateur est fermé ca marche ? ils doivent bien faire comme ca, paske tant que t sur le site c bon, et si tu fermes le nav, ben tu dois te reloger

Reply

Marsh Posté le 17-06-2002 à 23:34:27    

j'avoue ne pas savoir comment le navigateur peut informer le serveur qu'il s'est fermé...


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 17-06-2002 à 23:36:03    

je viens de tester chez moi avec un truc vraiment bete :
 
j'ai crée un cookieavec le bout de code que je t donné, et j ai affiché sa valeur.
 
ensuite g fermé la fenetre, g lu le cookie, il  n'existait plus. Donc ca marche. Tu me diras ct obligé tous les sites fonctionnent sur la fermeture du nav.

Reply

Marsh Posté le 17-06-2002 à 23:38:13    

ben je savais pas, pour moi ct juste une date d'expiration


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 17-06-2002 à 23:39:14    

sinon je suis allé sur ton site, t'utilise les cookies a l heure actuelle et tu veux faire un systeme par url c bien ca ?

Reply

Marsh Posté le 17-06-2002 à 23:39:46    

Masure a écrit a écrit :

oki, sinon pour mon cookie qui est supprimé quand le navigateur est fermé ca marche ? ils doivent bien faire comme ca, paske tant que t sur le site c bon, et si tu fermes le nav, ben tu dois te reloger  




 
avec la syntaxe que tu as donnée je confirme que le cookie est effacé une fois la fenetre fermée

Reply

Marsh Posté le 17-06-2002 à 23:42:40    

Masure a écrit a écrit :

sinon je suis allé sur ton site, t'utilise les cookies a l heure actuelle et tu veux faire un systeme par url c bien ca ?  




oui, c ça, suite à des reports de pb par certains utilisateurs, j'ai décidé de passer à une gestion des identifications sans ccokie


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 17-06-2002 à 23:44:04    

et ta dja vu un site qui tournait que par id dans l url ? maniere de faire comme eux, ils doivent bien avoir un systeme qui evite la peremption de l'id a temps fixe !
 
attend je crois que g un site en tete la je v voir il me semble qu ils mettent tout dans l url

Reply

Marsh Posté le 17-06-2002 à 23:46:48    

si toute les infos sont dans l'URL, il vaut mieux que la session ne dure pas trop longtemps... sinon, on pourrait voir ton identifiant et se faire passer pour toi


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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