Php session des membres, verification
Fermé
hugs-giver
Messages postés
88
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
10 juin 2014
-
2 mai 2009 à 14:31
hugs-giver Messages postés 88 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 10 juin 2014 - 22 mai 2009 à 10:54
hugs-giver Messages postés 88 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 10 juin 2014 - 22 mai 2009 à 10:54
A voir également:
- Php session des membres, verification
- Easy php - Télécharger - Divers Web & Internet
- Vérification url - Guide
- Sms tiktok verification code ✓ - Forum Mail
- Ants session déconnectée - Forum Services en ligne
- Facebook session expirée ✓ - Forum Facebook
5 réponses
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
135
2 mai 2009 à 16:27
2 mai 2009 à 16:27
Tu session est en fait un fichier créé sur le disque dur du serveur, donc tu peux a priori faire confiance aux données qui y sont contenues.
Personnellement, pour vérifier les droits d'un utilisateur, je les stocke dans une variable de session au moment du login, avec les autres informations dont j'aurai besoin dans mon script. Je régénère aussi un identifiant de session à chaque fois qu'il y a changement de droits (anonyme -> connecté -> admin ) afin d'éviter une fixation de session. Je vérifie également que l'agent utilisateur ne change pas entre deux requêtes, ce qui laisserait fortement présager un vol de session.
Voilà le code ajouté en tête de tous mes fichiers :
Ce code est inspiré des conseils trouvés ici : http://phpsec.org/projects/guide/fr/4.html
Personnellement, pour vérifier les droits d'un utilisateur, je les stocke dans une variable de session au moment du login, avec les autres informations dont j'aurai besoin dans mon script. Je régénère aussi un identifiant de session à chaque fois qu'il y a changement de droits (anonyme -> connecté -> admin ) afin d'éviter une fixation de session. Je vérifie également que l'agent utilisateur ne change pas entre deux requêtes, ce qui laisserait fortement présager un vol de session.
Voilà le code ajouté en tête de tous mes fichiers :
// Si la session est inactive depuis // 10 minutes ou plus, on la détruit. if ( isset( $_SESSION['timestamp'] ) && $_SESSION['timestamp'] >= time() + 600 ) { // Détruit toutes les variables de session. $_SESSION = array(); // On efface également le cookie de session. if ( isset( $_COOKIE[session_name()] )) { setcookie( session_name(), '', time()-42000, '/' ); } // Finalement, on détruit la session. session_destroy(); } else { $salt = 'une_chaine'; // Initialisation de la session. session_start(); if ( !isset( $_SESSION['initiated'] ) ) { session_regenerate_id(); $_SESSION['initiated'] == true; } // On vérifie que l'agent utilisateur ne change pas entre deux requêtes. if ( isset( $_SESSION['check'] ) ) { // Si c'est le cas, on demande à l'utilisateur de s'identifier à nouveau. if ( $_SESSION['check'] != md5( $_SERVER['HTTP_USER_AGENT'].$salt ) ) { header( 'Location: login.php' ); } } else { $_SESSION['check'] = md5( $_SERVER['HTTP_USER_AGENT'].$salt ); } $_SESSION['timestamp'] = time(); }Ce code n'est peut-être pas parfait, mais il apporte un niveau de protection supérieur et une charge inférieure au stockage en BDD que tu utilises (qui ne protège pas contre le vol ou la fixation de session).
Ce code est inspiré des conseils trouvés ici : http://phpsec.org/projects/guide/fr/4.html
hugs-giver
Messages postés
88
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
10 juin 2014
30
4 mai 2009 à 18:31
4 mai 2009 à 18:31
Merci, réponse précise et explicite, merci!
Je vais modifier mon code de la sorte!
Je voulai savoir, le md5 sert apparement à crypté le mdp si j'ai bien compris, mais je n'en vois pas l'utilité car je suis récemment tomber sur un site qui décodé les mots de passe md5 à la volée, je pourrait plus te donner l'adresse, mais bon, md5, j'ai pas l'impreesion que sa sert à grand chose, peut être faudrait-il créer sont propre algorythme dans se cas?
Ensuite, je voudrai comprendre à quoi sert le "$_SESSION['check']", tu y met quoi dedan le md5 c'est ça? $_SERVER['HTTP_USER_AGENT'] prend en mémoire le md5 également? La session timestamp ne suffit elle pas?
Dernière questions :) sur mon serveur les session durent 30 minutes, c'est de trop, 10 minutes c'est plus sur?
Merci encors de m'éclairé sur tout ça :)
Je vais modifier mon code de la sorte!
Je voulai savoir, le md5 sert apparement à crypté le mdp si j'ai bien compris, mais je n'en vois pas l'utilité car je suis récemment tomber sur un site qui décodé les mots de passe md5 à la volée, je pourrait plus te donner l'adresse, mais bon, md5, j'ai pas l'impreesion que sa sert à grand chose, peut être faudrait-il créer sont propre algorythme dans se cas?
Ensuite, je voudrai comprendre à quoi sert le "$_SESSION['check']", tu y met quoi dedan le md5 c'est ça? $_SERVER['HTTP_USER_AGENT'] prend en mémoire le md5 également? La session timestamp ne suffit elle pas?
Dernière questions :) sur mon serveur les session durent 30 minutes, c'est de trop, 10 minutes c'est plus sur?
Merci encors de m'éclairé sur tout ça :)
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
135
4 mai 2009 à 21:14
4 mai 2009 à 21:14
Le $_SESSION['check'] permet de limiter les risques de vol de session en s'assurant que le navigateur de l'utilisateur est le même entre deux requêtes. Je le hash en ajoutant un salt pour un brin plus de sécurité : c'est simplement au cazou quelqu'un parviendrait à forger une session, il faudrait alors qu'il sache ce qu'il y a dans "check" et qu'il connaisse le salt.
Les sessions sont de toutes façons stockées côté serveur donc a priori, personne ne peut savoir ce qu'il y a dedans. Mais je ne stocke jamais le mot de passe en clair, je stocke seulement un hash "mixé" entre md5 et sha1 (je ne donnerai pas mon algorithme précis évidemment), en ajoutant un salt unique généré aléatoirement pour chaque mot de passe. Le salt permet de compliquer très fortement le crackage du mot de passe par les méthodes classiques. En effet, le site dont tu parles fonctionne à partir d'une base de données : il enregistre un dictionnaire de mots de passe avec leur hash md5 associé. Tu soumets un hash, il le recherche dans sa base et renvoie le mot en clair. Si tu rajoutes un salt, ton mot de passe "toto" par exemple devient "toto?J4d5)G'#"... Peu de chances que celui-ci soit dans la base ! De même si tu changes l'algorithme : par exemple tu concatènes le md5 et le sha1... difficile de le craquer ! Ou tu alternes l'un et l'autre...
Pour la durée des sessions, ça dépend largement de ton application : si les visiteurs risquent de rester longtemps sur une page, il ne faut pas faire des sessions trop courtes au risque qu'il doivent s'identifier à chaque changement de page, ce qui les motiverait sûrement pour partir ! Je pense que je réévaluerai mes 10 minutes vers le haut lorsque je passerai en prod.
J'espère avoir répondu à tes questions, si tu veux savoir autre chose, n'hésite pas à demander...
Les sessions sont de toutes façons stockées côté serveur donc a priori, personne ne peut savoir ce qu'il y a dedans. Mais je ne stocke jamais le mot de passe en clair, je stocke seulement un hash "mixé" entre md5 et sha1 (je ne donnerai pas mon algorithme précis évidemment), en ajoutant un salt unique généré aléatoirement pour chaque mot de passe. Le salt permet de compliquer très fortement le crackage du mot de passe par les méthodes classiques. En effet, le site dont tu parles fonctionne à partir d'une base de données : il enregistre un dictionnaire de mots de passe avec leur hash md5 associé. Tu soumets un hash, il le recherche dans sa base et renvoie le mot en clair. Si tu rajoutes un salt, ton mot de passe "toto" par exemple devient "toto?J4d5)G'#"... Peu de chances que celui-ci soit dans la base ! De même si tu changes l'algorithme : par exemple tu concatènes le md5 et le sha1... difficile de le craquer ! Ou tu alternes l'un et l'autre...
Pour la durée des sessions, ça dépend largement de ton application : si les visiteurs risquent de rester longtemps sur une page, il ne faut pas faire des sessions trop courtes au risque qu'il doivent s'identifier à chaque changement de page, ce qui les motiverait sûrement pour partir ! Je pense que je réévaluerai mes 10 minutes vers le haut lorsque je passerai en prod.
J'espère avoir répondu à tes questions, si tu veux savoir autre chose, n'hésite pas à demander...
hugs-giver
Messages postés
88
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
10 juin 2014
30
5 mai 2009 à 18:36
5 mai 2009 à 18:36
Tes réponses sont vraiment bien formulé, c'est super simpa de m'aider, maintenant je comprend mieu, enfin, je pense avoir tout compris, ou presque...
Le fameux $salt, en fait, c'est toi qui le défini plus haut c'est ça?
Et si oui, il ne change pas entre deux utilisateurs, c'est toujours le même, par exemple, tu met qq part dans ton fichier de configuration un :
<?php
$salt = "?J4d5)G'#";
?>
Si c'est ça, j'ai tout compris, sinon, ça serait simpa de me dire d'ou il vient, car sur le net j'ai rien trouvé!
Et pour les durées des sessions, je laisserai les 30 minutes par défaut car les visiteurs pourront uploader des musiques, et avec ceux qui ont le bas débit, on ne sait jamais...
après, je peut aussi utiliser un algoritme perso genre
<?php
$mdp = str_replace("a", "fg64554fdg65dfg4655f", $mdp);
$mdp = str_replace("b", "4zerf45e6z4ez34fz3zzf", $mdp);
//.... Et ainsi de suite de' 0' à '9' et de 'a' à 'z';
?>
C'est encore plus balèze à craqué ça non?
Encore merci!
Le fameux $salt, en fait, c'est toi qui le défini plus haut c'est ça?
Et si oui, il ne change pas entre deux utilisateurs, c'est toujours le même, par exemple, tu met qq part dans ton fichier de configuration un :
<?php
$salt = "?J4d5)G'#";
?>
Si c'est ça, j'ai tout compris, sinon, ça serait simpa de me dire d'ou il vient, car sur le net j'ai rien trouvé!
Et pour les durées des sessions, je laisserai les 30 minutes par défaut car les visiteurs pourront uploader des musiques, et avec ceux qui ont le bas débit, on ne sait jamais...
après, je peut aussi utiliser un algoritme perso genre
<?php
$mdp = str_replace("a", "fg64554fdg65dfg4655f", $mdp);
$mdp = str_replace("b", "4zerf45e6z4ez34fz3zzf", $mdp);
//.... Et ainsi de suite de' 0' à '9' et de 'a' à 'z';
?>
C'est encore plus balèze à craqué ça non?
Encore merci!
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
135
5 mai 2009 à 21:02
5 mai 2009 à 21:02
Voui, c'est bien ça le salt. En ce qui me concerne, je ne stocke pas les mots de passe en clair dans ma base de données, mais je stocke un hash avec un salt généré aléatoirement pour chaque utilisateur. En effet, un salt fixe autorise un attaquant, s'il y a accès, à refaire sa base de craquage en fonction de ce salt (encore faut-il qu'il ait envie d'y passer du temps, donc que le contenu potentiellement accessible avec un mot de passe soit intéressant pour lui...), tandis qu'avec un hash aléatoire, il n'a plus aucune chance.
Pour la durée de tes sessions, 30 minutes n'est pas énorme si les gens doivent uploader de gros fichiers. Dans tous les cas, fais attention à ce que t'envoient les utilisateurs : l'utilisation de ressources utilisateurs sans contrôles drastiques est la porte ouverte au piratage ! (en parlant de piratage, j'espère que tes utilisateur ne pourront upper que des fichiers libres de droit..?)
Ton algorithme perso a quelques inconvénients : d'une part, il est lourd (je ne dis pas que le calcul d'une somme md5 n'est pas lourde, mais au moins les algos sont connus et efficaces) et pas très lisible Ensuite, si tu ne veux pas qu'il soit réversible (ou du moins pas facilement), il faudra introduire des caractères non encore traités dans les chaines de remplacement (comme tu introduis des chiffres dans tes exemples). Cela signifie que la chaine à traiter sera de plus en plus longue à chaque itération de l'algo, et donc demandera de plus en plus de ressources et va te générer une chaîne immense. Et last but not least, il existe des algos qui ont le même but que celui que tu veux (et pas seulement md5 et sha1), utilises-les donc !
Content que mes commentaires te soient utile, comme l'a dit je ne sais qui : "Sans Partage, le Savoir n'est rien !". Et chacun peut contribuer, à son niveau ^^.
Pour la durée de tes sessions, 30 minutes n'est pas énorme si les gens doivent uploader de gros fichiers. Dans tous les cas, fais attention à ce que t'envoient les utilisateurs : l'utilisation de ressources utilisateurs sans contrôles drastiques est la porte ouverte au piratage ! (en parlant de piratage, j'espère que tes utilisateur ne pourront upper que des fichiers libres de droit..?)
Ton algorithme perso a quelques inconvénients : d'une part, il est lourd (je ne dis pas que le calcul d'une somme md5 n'est pas lourde, mais au moins les algos sont connus et efficaces) et pas très lisible Ensuite, si tu ne veux pas qu'il soit réversible (ou du moins pas facilement), il faudra introduire des caractères non encore traités dans les chaines de remplacement (comme tu introduis des chiffres dans tes exemples). Cela signifie que la chaine à traiter sera de plus en plus longue à chaque itération de l'algo, et donc demandera de plus en plus de ressources et va te générer une chaîne immense. Et last but not least, il existe des algos qui ont le même but que celui que tu veux (et pas seulement md5 et sha1), utilises-les donc !
Content que mes commentaires te soient utile, comme l'a dit je ne sais qui : "Sans Partage, le Savoir n'est rien !". Et chacun peut contribuer, à son niveau ^^.
hugs-giver
Messages postés
88
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
10 juin 2014
30
6 mai 2009 à 20:47
6 mai 2009 à 20:47
merci de tes réponses, donc, je commence dans l'ordre:
Si ta variable $salt est généré aléatoirement, le visiteur va par exemple avoir ceci :
$salt = 'gerf?546354er?';
md5( $_SERVER['HTTP_USER_AGENT'].$salt ) = $_SESSION['check'] ;
Mais si il va sur une autre page, la variable sera à nouveau généré aléatoirement, tu aura donc par exemple :
$salt = 'uneautrechaineds545534svdf';
md5( $_SERVER['HTTP_USER_AGENT'].$salt ) = $_SESSION['check'] ;
Donc, le script renverra forcément false, c'est ça que je comprend pas, a part ça, j'ai compris ton script, il est bien pensé, c'est juste cette variable qui me pose problème!!
Ensuite, pour les fichiers, j'ai réduit la taille max à 5mo pour les musiques et 3 mo pour les photos et avatars, bien sur, les photos et les avatars uploader sont réduit grâce à la librairie gd, donc je pense que 30 minutes suffisent, il faudra que je demande à un pote qui est encors en bas débit de tester le bordel, sinon, je modifieré la durée des session pour ces pages la!
En ce qui concerne le format des fichiers, il sera réduit à jpg et jpeg pour les images et à mp3 et wmv pour les audios, je pense que cette simple verif devrait suffire point de vue sécurité!
Et vue que tu me demande, pour les droits sur les fichiers, je metterai simplement un genre de règlement avec une case à coché certifiant les droits sur le fichier, je pense que cela sera suffisant!
Pour le codage, j'utiliserai comme dans ton script avec un ptit algorythme en plus, de toutes façon, ça sera une genre de plate-forme blog, date de concert etc... truc sans donnée très importante, innutile de sécurisé de trop le script!
Je suis d'accord avec toi, en général j'apprend dans les tutos, mais des fois, pas le choix, je suis obligé de voir sur les forums!
Merci
Si ta variable $salt est généré aléatoirement, le visiteur va par exemple avoir ceci :
$salt = 'gerf?546354er?';
md5( $_SERVER['HTTP_USER_AGENT'].$salt ) = $_SESSION['check'] ;
Mais si il va sur une autre page, la variable sera à nouveau généré aléatoirement, tu aura donc par exemple :
$salt = 'uneautrechaineds545534svdf';
md5( $_SERVER['HTTP_USER_AGENT'].$salt ) = $_SESSION['check'] ;
Donc, le script renverra forcément false, c'est ça que je comprend pas, a part ça, j'ai compris ton script, il est bien pensé, c'est juste cette variable qui me pose problème!!
Ensuite, pour les fichiers, j'ai réduit la taille max à 5mo pour les musiques et 3 mo pour les photos et avatars, bien sur, les photos et les avatars uploader sont réduit grâce à la librairie gd, donc je pense que 30 minutes suffisent, il faudra que je demande à un pote qui est encors en bas débit de tester le bordel, sinon, je modifieré la durée des session pour ces pages la!
En ce qui concerne le format des fichiers, il sera réduit à jpg et jpeg pour les images et à mp3 et wmv pour les audios, je pense que cette simple verif devrait suffire point de vue sécurité!
Et vue que tu me demande, pour les droits sur les fichiers, je metterai simplement un genre de règlement avec une case à coché certifiant les droits sur le fichier, je pense que cela sera suffisant!
Pour le codage, j'utiliserai comme dans ton script avec un ptit algorythme en plus, de toutes façon, ça sera une genre de plate-forme blog, date de concert etc... truc sans donnée très importante, innutile de sécurisé de trop le script!
Je suis d'accord avec toi, en général j'apprend dans les tutos, mais des fois, pas le choix, je suis obligé de voir sur les forums!
Merci
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
135
6 mai 2009 à 21:07
6 mai 2009 à 21:07
Attention, ne te trompes pas de sens dans l'affectation : md5( $_SERVER['HTTP_USER_AGENT'].$salt ) = $_SESSION['check'] ; est faux, il faut mettre $_SESSION['check'] = md5( $_SERVER['HTTP_USER_AGENT'].$salt ) ;
Ensuite, je ne génère pas un salt pour chaque utilisateur dans ce cas, mais uniquement pour le mot de passe de connexion, que je ne stocke jamais. Pour un simple code de vérif, qui est déjà sécurisé par la session côté serveur, je ne vais pas mettre en place une solution aussi compliquée.
La vérif de l'extension ou du type mime ne suffise pas à garantir que ton image est bien une image, renseigne toi la dessus sur google, essaie de redimensionner l'image pour t'assurer que c'en est bien une. Il est tout à fait possible de faire passer un script php pour une image qui peut par la suite être exécutée.
Au sujet des droits, si tu héberges et mets à disposition du contenu non libre de droits, ce n'est pas une petite case à cacher qui te protègera, tu risques gros !
Ensuite, je ne génère pas un salt pour chaque utilisateur dans ce cas, mais uniquement pour le mot de passe de connexion, que je ne stocke jamais. Pour un simple code de vérif, qui est déjà sécurisé par la session côté serveur, je ne vais pas mettre en place une solution aussi compliquée.
La vérif de l'extension ou du type mime ne suffise pas à garantir que ton image est bien une image, renseigne toi la dessus sur google, essaie de redimensionner l'image pour t'assurer que c'en est bien une. Il est tout à fait possible de faire passer un script php pour une image qui peut par la suite être exécutée.
Au sujet des droits, si tu héberges et mets à disposition du contenu non libre de droits, ce n'est pas une petite case à cacher qui te protègera, tu risques gros !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
hugs-giver
Messages postés
88
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
10 juin 2014
30
22 mai 2009 à 10:54
22 mai 2009 à 10:54
Slt, dzl pour le retard de réponse!
Pour la variable $salt, j'ai créer un code de crypté à l'aide des infos du membre, je pense que cela devrai suffire, puis comme tu dit, c'est déjà bien sécuriser coté serveur, donc ça devrait allé!!
Pour l'upload d'image, je pense que mon script est assé sécurisé, car toutes les images sont redimentionné, donc normalement, si ce n'est pas une image, un message d'erreur devrait être envoyé!
Par contre, je n'arrive à redimentionné que les images jpeg et jpg, ce qui est gif et btm etc... n'est pas pris en compte par ma fonction, mais je ne pense pas que cela pose problème car en générale, le format utilisé est le jpg!
Pour ce qui est des musiques, c'est les artistes, eu même qui metteron à disposition leurs propres compositions, et la case à coché me permet d'être sur qu'il soient averti que les musiques qui mêtent en ligne leurs appartiens, et que les droits de diffusion leurs appartient aussi!
Je pense que cela devrait suffire, car sinon, des sites comme youtube daylimotion, myspace..... serait également illégale!!
Pour la variable $salt, j'ai créer un code de crypté à l'aide des infos du membre, je pense que cela devrai suffire, puis comme tu dit, c'est déjà bien sécuriser coté serveur, donc ça devrait allé!!
Pour l'upload d'image, je pense que mon script est assé sécurisé, car toutes les images sont redimentionné, donc normalement, si ce n'est pas une image, un message d'erreur devrait être envoyé!
Par contre, je n'arrive à redimentionné que les images jpeg et jpg, ce qui est gif et btm etc... n'est pas pris en compte par ma fonction, mais je ne pense pas que cela pose problème car en générale, le format utilisé est le jpg!
Pour ce qui est des musiques, c'est les artistes, eu même qui metteron à disposition leurs propres compositions, et la case à coché me permet d'être sur qu'il soient averti que les musiques qui mêtent en ligne leurs appartiens, et que les droits de diffusion leurs appartient aussi!
Je pense que cela devrait suffire, car sinon, des sites comme youtube daylimotion, myspace..... serait également illégale!!