Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/08/2011, 23h43   #1
Invité de passage
 
Inscription : septembre 2008
Messages : 17
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : septembre 2008
Messages : 17
Points : 4
Points : 4
Par défaut Que pensez vous de la sécurité de mon espace membre?

Bonjour, je code un CMS perso, ca m'évite d'utiliser une usine a gaz et c'est bon pour l'apprentissage , tout est au poil et là je viens de finir la partie relative à la sécurité j'aimerai avoir votre avis.
J'ai lu tout un tas de tutos sur le sujet et ai essayé de synthétiser le tout pour faire quelque chose de pas trop dégueulasse, mais n'étant qu'un débutant je ne peux etre sur de la fiabilité de tout ca......

Comme du code sera plus simple à lire qu'une explication de ma part voici toutes les fonctions utilisées:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
/* shaPassword
 * chiffre le mot de passe utilisateur ou toute autre donnée
 */
function shaPassword($pass){
    $context = hash_init('sha256');
    hash_update($context, $pass);
    return hash_final($context);
}
 
/* sessionLogin
 * initialise les variables de session lors du login réussi d'un utilisateur
 */
function sessionLogin($login, $time){
    session_regenerate_id(TRUE);
    $_SESSION['user'] = dbSafe($login);
    $_SESSION['time'] = time();
    $_SESSION['id'] = (string)randNumber();
    $_SESSION['nav'] = shaPassword($_SERVER['HTTP_USER_AGENT']);
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
    return 0;
}
 
 
/* sessionEnd
 * termine la session
 */
function sessionEnd(){
    session_start();
    session_unset();
    session_destroy();
    return 0;
}
 
function addCookie($name, $value){
    setCookie($name, $value, $_SESSION['time']+3600, '/admin/');
    return 0;
}
 
function delCookie(){
    setcookie('auth', '');
    setcookie('nav', '');
    return 0;
}
voilà la partie de code utilisée lors d'un login réussi:
Code :
1
2
3
4
5
6
7
8
9
 
if($dbPass[0][0] == $passEncrypted){
                    // si tout va bien (login et mot de passe OK on redirige vers
                    // l'espace utilisateur.
                    sessionLogin($name);
                    addCookie('auth', $_SESSION['id']);
                    addCookie('nav', shaPassword($_SERVER['HTTP_USER_AGENT']));
                    redirect('dashboard');
                }
et enfin le code situé dans l'entête de chaque page de la zone membre:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
if(!isset($_SESSION))
        session_start();
    $exploded = explode('/', $_SERVER['REQUEST_URI']);
    $requestedPage = $exploded[count($exploded) - 1];
 
    include_once($_SERVER["DOCUMENT_ROOT"] . '/config.php');
    if(!empty($_COOKIE['auth']) && !empty($_COOKIE['nav'])){
        if($_COOKIE['auth'] != $_SESSION['id'] || $_COOKIE['nav'] != $_SESSION['nav']){
            addCookie('auth', '');
            addCookie('nav', '');
            sessionEnd();
            redirect('piege');
        }
        elseif($requestedPage == 'login.php'){
        redirect('dashboard');
        }
    }
    elseif(empty($_COOKIE['auth']) && empty($_COOKIE['nav']) && $requestedPage != 'login.php'){
        sessionEnd();
        redirect('piege');
    }
    elseif(($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) && $requestedPage != 'login.php'){
        sessionEnd();
        redirect('piege');
    }
la fonction redirect() redirige l'utilisateur frauduleux vers un autre site, et le bon utilisateur vers le tableau de bord.

Je pense également ajouter un peu de sel a ces 2 variables $_SESSION['id'] et $_SESSION['nav'] ca ne peux pas faire de mal a condition que la gestion de tout cela soit correcte.

Merci pour vos avis et conseils.
diodio13fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 08h38   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Hello

Pour commencer il y a plusieurs points que je ne comprends pas dans ton code:
- pourquoi toutes tes fonction renvoient 0 ?
- pourquoi tu définis une sécurité par cookies ? d'une part c'est pas plus sécurisé que le comportement normal des sessions et d'autre par qu'est ce qui va se passer si le client à désactivé les cookies ?
- ton code fait implicitement plusieurs session_start (par exemple la fonction session_end en fait un à nouveau)
- tu peux vérifier qu'une session existe en utilisant session_id
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 16h53   #3
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Salut,

Déjà bravo pour ce que tu as déjà fait, Qu'est ce qui arrive quand un utilisateur oublie son mot de passe de passe ? ou à une ip dynamique ? A priori il va se faire lapider dans le piège
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 16h57   #4
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Citation:
Envoyé par Thes32 Voir le message
... Qu'est ce qui arrive quand un utilisateur oublie son mot de passe de passe ?
Un mot de passe ne suffit pas ?
Il faut aussi un mot de passe de passe ?
Ouah ! drôlement sécurisé !

Plus sérieusement (?!),
ca me fait penser à une porte super-sécurisée, avec 50 verrous, 10 barres de force, 150 cadenas, 3 digicodes, ....
.... alors que la fenêtre est restée ouverte ! ...

Plus sérieusement (pour de vrai cette fois), "trop de sécurité tue la sécurité".
- hashage des données sensibles = OK
- mais ... session + cookies ... ? cookies = "stocké sur l'ordi client" = en dehors de "ta" protection ...
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/08/2011, 17h12   #5
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 460
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 460
Points : 644
Points : 644
Pourquoi tu ne travaille pas avec un framework?
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 05/08/2011, 19h23   #6
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Citation:
Envoyé par m4riachi Voir le message
Pourquoi tu ne travaille pas avec un framework?
Citation:
Bonjour, je code un CMS perso, ca m'évite d'utiliser une usine a gaz et c'est bon pour l'apprentissage , tout est au poil et là je viens de finir la partie relative à la sécurité j'aimerai avoir votre avis.
Il est pourtant clair, non ?
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2011, 18h05   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
ça ne l'empêche pas de construire son propre CMS à l'aide d'un framework exitant
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/08/2011, 23h58   #8
Invité de passage
 
Inscription : septembre 2008
Messages : 17
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : septembre 2008
Messages : 17
Points : 4
Points : 4
Bonsoir et merci pour vos avis. Je vais répondre dans l'ordre.

Citation:
Envoyé par Benjamin Delespierre
Hello

Pour commencer il y a plusieurs points que je ne comprends pas dans ton code:
- pourquoi toutes tes fonction renvoient 0 ?
- pourquoi tu définis une sécurité par cookies ? d'une part c'est pas plus sécurisé que le comportement normal des sessions et d'autre par qu'est ce qui va se passer si le client à désactivé les cookies ?
- ton code fait implicitement plusieurs session_start (par exemple la fonction session_end en fait un à nouveau)
- tu peux vérifier qu'une session existe en utilisant session_id
- J'utilise return(0); pour terminer "proprement les fonctions.
- pourquoi les cookies? parce que de tout ce que j'ai pu lire il m'a semblé que les session seules n'étaient pas suffisantes pour une "bonne" sécurité. Pour ce qui est de la désactivation des cookies, je ne me suis pas trop posé la question pour 2 raisons, 1° je ne compte pas diffuser ce CMS, c'est pour une utilisation perso et j'active les cookie dans mon navigateur, 2° je pense que quelqu'un désactivant les cookies dans son navigateur a des intentions suspectes.
Mais il est vrai que meme si l'utilisation est perso, je prefererai coder proprement ca pourrait servir pour d'autre projets.
- la fonction sessionEnd(); fait appel a session_start(); car sessionEnd() est appelée dans le fichier logout.php n'ayant aucune entête, il est appelé par formulaire en cliquant sur le bouton de déconnexion, a la fin de ce fichier on redirige vers l'accueil.
- pour session_id je ne connaissais pas je vais me pencher dessus merci.

Citation:
Envoyé par Thes32 Voir le message
Salut,

Déjà bravo pour ce que tu as déjà fait, Qu'est ce qui arrive quand un utilisateur oublie son mot de passe de passe ? ou à une ip dynamique ? A priori il va se faire lapider dans le piège
Merci, pour ce qui est du mot de passe l'utilisation étant perso je serai toujours a temps d'en changer dans postgre, pour l'ip dynamique au pire apres la redirection il sera toujour possible de venir se loguer et les cookies ne durant qu'une heure, c'est pas de chance si l'ip change entre temps puis je suis en ip fixe :p.

Citation:
Envoyé par jreaux62 Voir le message
Un mot de passe ne suffit pas ?
Il faut aussi un mot de passe de passe ?
Ouah ! drôlement sécurisé !

Plus sérieusement (?!),
ca me fait penser à une porte super-sécurisée, avec 50 verrous, 10 barres de force, 150 cadenas, 3 digicodes, ....
.... alors que la fenêtre est restée ouverte ! ...

Plus sérieusement (pour de vrai cette fois), "trop de sécurité tue la sécurité".
- hashage des données sensibles = OK
- mais ... session + cookies ... ? cookies = "stocké sur l'ordi client" = en dehors de "ta" protection ...
- je sais que j'ai peut etre un peu abusé avec 2 cookies et des hash long comme ca, si je suis la c'est justement pour voir si elle existe cette fenetre .
- je sais que les cookies sont hors de ma protection, mais leur vol ne servirai a rien car l'un d'eux est un hash de la signature du navigateur + grain de sel.

@ m4riachi et Benjamin Delespierre: c'est mon premier projet en php, je pense qu'il est bon pour moi de commencer de 0, déja que je n'ai pas codé orienté objet (je sais ....... tapez pas) va falloi r que je m'y penche en php, je n'ai abordé la POO qu'en java. Mais ca sera l'occasion de passer mon CMS en V2.0 .

Donc au final la sécurité que j'ai codé est-elle suffisante, abusive ou dérisoire?
diodio13fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 09h45   #9
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Citation:
Envoyé par diodio13fr Voir le message
- J'utilise return(0); pour terminer "proprement les fonctions.
S'il n'y a aucune raison valable de renvoyer un entier, ne le fais pas.

Citation:
Envoyé par diodio13fr Voir le message
- pourquoi les cookies? parce que de tout ce que j'ai pu lire il m'a semblé que les session seules n'étaient pas suffisantes pour une "bonne" sécurité. Pour ce qui est de la désactivation des cookies, je ne me suis pas trop posé la question pour 2 raisons, 1° je ne compte pas diffuser ce CMS, c'est pour une utilisation perso et j'active les cookie dans mon navigateur, 2° je pense que quelqu'un désactivant les cookies dans son navigateur a des intentions suspectes.
Par forcément, tu as des navigateurs mobiles qui ne prennent pas les cookies par exemple

Citation:
Envoyé par diodio13fr Voir le message
@ m4riachi et Benjamin Delespierre: c'est mon premier projet en php, je pense qu'il est bon pour moi de commencer de 0, déja que je n'ai pas codé orienté objet (je sais ....... tapez pas) va falloi r que je m'y penche en php, je n'ai abordé la POO qu'en java. Mais ca sera l'occasion de passer mon CMS en V2.0 .
Si tu connais Java, passer en PHP Orienté Objet se fera presque naturellement
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2011, 21h37   #10
Invité de passage
 
Inscription : septembre 2008
Messages : 17
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : septembre 2008
Messages : 17
Points : 4
Points : 4
ok pour les return(0); je vais les supprimer.
Pour les cookies c'est vrai que je n'avais pas pensé à ce cas là.
Sinon ça y est je commence le php OO, obligé car je jette un coup d'œil à zend... au premier abord je trouve ça assez lourd à mettre en oeuvre, je vais persister et voir si je m'en sort mieux dans quelques temps.

Pour en revenir, au sujet de base, et puisque je ne devrai pas tarder à mettre mon site en production, la sécurité vous en pensez quoi sera-t-elle efficace?
diodio13fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2011, 21h44   #11
Membre habitué
 
Homme Lucas GAUTHERON
Lycéen
Inscription : décembre 2008
Messages : 106
Détails du profil
Informations personnelles :
Nom : Homme Lucas GAUTHERON

Informations professionnelles :
Activité : Lycéen

Informations forums :
Inscription : décembre 2008
Messages : 106
Points : 145
Points : 145
Citation:
Envoyé par diodio13fr Voir le message
ok pour les return(0); je vais les supprimer.
bien
Citation:
Envoyé par diodio13fr Voir le message
Pour les cookies c'est vrai que je n'avais pas pensé à ce cas là.
Le problème demeure avec l'usage des sessions suivant la configuration.
Citation:
Envoyé par diodio13fr Voir le message
Sinon ça y est je commence le php OO, obligé car je jette un coup d'œil à zend... au premier abord je trouve ça assez lourd à mettre en oeuvre, je vais persister et voir si je m'en sort mieux dans quelques temps.
Normalement la POO en PHP devrait être bien similaire à ce qu'elle est en java ou en c#..
Citation:
Envoyé par diodio13fr Voir le message
Pour en revenir, au sujet de base, et puisque je ne devrai pas tarder à mettre mon site en production, la sécurité vous en pensez quoi sera-t-elle efficace?
elle sera aussi efficace que sur un système se contentant d'utiliser des sessions mais ce sera plus lourd.
lucas74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 16h15   #12
Nouveau Membre du Club
 
Inscription : juillet 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 36
Points : 27
Points : 27
Il me semble que de toute façon les cookies sont nécessaires même pour les sessions standards (il faut bien que l'ID de session transite dans la requete HTML, donc soit par les cookies, soit _GET ou _POST).


Niveau sécurité, je te conseille de te pencher sur mon thread (auquel j'ai répondu récemment). J'y parle d'une technique de hashage/cryptage (c'est différent mais bon) performante. Un des soucis de ta technique de hash, c'est que tu te bases sur le navigateur. Tester la "régularité" de l'user agent est intéressant, mais c'est un maigre verrou. Et utiliser l'useragent (ou son hash) comme élément de hash ou grain de sel est peu performant : c'est un élément prévisible et peu variable.





Une chose que je n'ai jamais comprise par ailleurs, pourquoi le logout force-t-il une redirection ?
Normalement un logout c'est juste un kill de session (et de cookie). Qu'est ce qui rend la redirection nécessaire ?
Doonge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 17h46   #13
Invité de passage
 
Inscription : septembre 2008
Messages : 17
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : septembre 2008
Messages : 17
Points : 4
Points : 4
@lucas74: Merci, si c'est efficace c'est bon, meme si c'est un peu plus lourd. J'ai quand meme tendance a croire que cela sera un peu plus efficace.

@Doonge: Salut, j'ai lu ton thread, effectivement utiliser une table de la base est une bonne idée, il y a d'ailleurs un tuto sur developpez, mais je ne voulais pas surcharger la base et lui envoyer trop de requetes "surperflue". Par contre je ne pense pas qu'utiliser l'useragent soit un maigre verrou, il est n'est pas variable pour un même utilisateur au cours d'une même session (et tant mieux) par contre pour le prédire.... par exemple voici mon actuel sur une machine du boulot :
Code :
Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.20) Gecko/20110803 Firefox/3.6.20 ( .NET CLR 3.5.30729)
il y a le navigateur mais aussi l'OS sa version, la langue du système et d'autre choses que je connais pas. Donc à prédire!! en plus je l'utilise en hash ajouté à une autre valeur totalement imprévisible donc je pense que ça doit etre plutot fiable.

pour ce qui de la redirection lors d'un logout, elle permet juste de revenir à l'index du site, car je me dis que selon d'ou est faite la deconnexion (espace membre ou pas) le mieux est de revenir à l'index, il est possible aussi de rester sur la page courante mais si elle appartient à l'espace membre ce la sera considéré comme une usurpation puisque la session est detruite en cours de route. Je ne trouve pas necessaire de detruire les cookies car ils deviennent unitilisable et que des nouveaux seront renvoyés à la connexion suivante .
diodio13fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 18h34   #14
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
Salut,
loin d'être un expert mais a priori je dirais que ce ne sera pas plus efficace et que le seul truc utile ici est le session_regenerate_id(true). Mais il est mal placé, il faut regénérer l'id à chaque requête.
Pour étayer ce qu'a dit jreaux62, tout est transmis dans ta requête, user-agent, noms et valeurs des cookies, ça ne change donc rien au problème de vol de session, d'ajouter des cookies ou de crypter quoique ce soit.
Je te conseille de lire ceci : http://guillaume-affringue.developpe...rement/?page=4
Je crois qu'il y a d'ailleurs un oubli important dans cette page, c'est que si l'on arrive à écouter le réseau dans un sens, on peut également le faire dans l'autre ainsi on peut a priori récupérer le nouvelle identifiant avant que le client originel ne l'ait reçu, à moins que je ne me plante complètement mais il me semble avoir compris le mécanisme.
Pour info, le mécanisme de stockage/vérification d'ip me semble bien plus efficace que ce que tu proposes, couplé avec la regénération d'id et en plus la protection htaccess ça commence à être intéressant même si c'est plus galère à mettre en oeuvre.
__________________
Vive les roues en pierre
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 21h11   #15
Nouveau Membre du Club
 
Inscription : juillet 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 36
Points : 27
Points : 27
Heu je sais pas où t'as lu que je conseillais d'utiliser une table de la base de données. Etant donné que je sujet principal de mon thread n'est pas vraiment les "détails" des tricks de sécurité et de hashage, mais plutot la vulnérabilité des types de connections par rapport au hijacking, je vais supposer que c'est pas bien expliqué dans le thread et essayer de préciser ici:


- L'user-agent est un faible verrou, parce qu'il se choppe très facilement (la victime va sur un site que tu contrôles => elle envoie ses en-tête => tu les as, point, et ce sans technique de sniffage ou autre).

- Un attaquant, puisqu'il connait le grain de sel, peut mener une attaque type dictionnaire, ou bruteforce, puisque le grain de sel ne change pas (et pire : est connu, ce qui lui permettrait de construire ses propres cookies/sessions valides), et qu'il reçoit beaucoup de hashages différents avec le même grain de sel (qu'au pire il connait).


Okay pour la redirection chez toi.
Je ne détruis pas les cookies, je pensais juste à une session_destroy (qui chez moi détruit beaucoup d'information stockée sur le cookie, parce que je choisis parfois de les stocker sur le cookie -par exemple les paniers).
Je vais pas entrer dans les détails de mon code (qui permet une redirection interne plutot qu'une redirection forcée chez l'utilisateur), mais puisque les utilisateurs cliquent sur un lien [ logout ], pourquoi ne pas faire en sorte qu'il pointe sur la page d'index avec en get un parametre logout (ou un autre format si tu utilises le redirect via htaccess) ?
L'essentiel c'est que ca fonctionne bien sûr, et chez toi ça fonctionne déjà impec, de plus l'action logout n'est pas tellement fréquente, mais je trouve pas ça tellement optimisé de doubler la requete en forcant une redirection.


edit:
Tiens ton article est marrant Djakisback, c'est la technique que j'ai décrite dans mon thread, et ses défauts ont été mis en évidence.
L'un des défauts, qui est donné dans l'article, c'est que la méthode ne fonctionne pas si le pirate prolonge la session, simplement.
Un défaut 'oublié', c'est l'utilisateur qui double click.
Doonge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 21h58   #16
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
En fait je crois que le problème dans le code proposé par diodio c'est qu'il stocke le résultat du hash dans un cookie et cette valeur est donc transmise dans chaque requête http, ce qui n'a aucun intérêt vu qu'elle peut être capturée au même titre que l'id de session.
__________________
Vive les roues en pierre
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 01h48   #17
Invité de passage
 
Inscription : septembre 2008
Messages : 17
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : septembre 2008
Messages : 17
Points : 4
Points : 4
Donc si je comprend bien (comme l'a dit lucas74) je n'apporte réellement rien de plus en terme de sécurité par rapport à un système classique de session avec PHPSESSID. Juste qu'il faut capturer plus d'informations pour usurper une identité? Néanmoins le contrôle de l'IP du visiteur est une protection efficace non? Disons que mon site n'aura pas suffisamment d'importance pour que quelqu'un passe du temps à le craquer en capturant les cookies et usurpant l'IP d'un utilisateur valide? Après il va falloir que je m'assure qu'il "réagi" bien au niveau des iSQL, XSS et autres conneries facilement mise en oeuvre par un script kiddie....
diodio13fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 02h54   #18
Nouveau Membre du Club
 
Inscription : juillet 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 36
Points : 27
Points : 27
Les sessions vivent essentiellement grâce aux cookies.

Le cookie contient généralement l'ID (encodée ou non) de session, et comme le cookie est envoyé à chaque fois qu'un utilisateur visite ton site, c'est comme ça que tu sais que c'est lui.

Tu peux éventuellement, si tu veux, vérifier l'IP, ou l'User-agent, mais cela n'apporte en général aucune réelle sécurité en plus (et ça apporte des problèmes, car l'IP n'est pas toujours fixe, même pour un bon utilisateur).


Pour frauder une session, un pirate doit être capable "d'inventer" une session valide, ou de "modifier" les informations de sessions, ou encore de "voler/copier" une session existante.

Pour inventer ou modifier une session, il doit connaitre ou deviner à peu près ton code. Il vaut mieux être sûr qu'un pirate soit incapable de le faire, et d'habitude un script php avec sessions SQL refuse les PHPSESSID qu'il n'a pas créées (pas d'inventions). Il vaut mieux être sûr également qu'il n'est pas possible de modifier des infos de sessions (ça ne te concerne pas des masses vu que tu stockes probablement les infos de sessions via SQL, coté serveur donc).

Le truc le plus ennuyeux c'est le vol de session.
Un premier truc pour s'en prémunir, c'est rendre longs et aléatoires les identifiants de sessions (donc on peut pas deviner facilement les ID en cours d'utilisation).
Mais cela n'empêche pas le vol de cookie.

Je crois qu'une technique courante pour "voler" les cookies, c'est sniffer les connections au site (ou celles d'une victime). Cela implique que l'attaquant connaît forcément :

- l'IP du visiteur
- ses entêtes HTML, c'est à dire l'user-agent, le contenu du cookie (donc l'identifiant avec), et même les informations GET et POST (tout le bazard quoi).

Donc à mon avis, si un attaquant connait le PHPSESSID (qu'on choppe dans le cookie), il connait le reste aussi.
Doonge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 10h36   #19
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
A vérifier mais il me semble que c'est un peu plus compliqué d'usurper une ip, tu tapes pas dans la même couche OSI et je pense que le niveau devient un peu plus élevé contrairement à l'envoi d'une simple requête HTTP à la portée de tout le monde.
Enfin, tout ça pour dire qu'à mon avis, dans ton cas seul l'id de session suffira et peut-être le régénérer à chaque requête, ce qui empêchera le vol direct de cookie mais pas le vol par capture sur le trafic. S'il y a d'autres avis, je suis très intéressé également
__________________
Vive les roues en pierre
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 11h00   #20
Membre éclairé
 
Avatar de Inazo
 
Gérant - société de développement web
Inscription : avril 2007
Messages : 290
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Gérant - société de développement web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2007
Messages : 290
Points : 360
Points : 360
Bonjour à tous,

Si j'ai un premier conseil à donner évitez de faire des pages de piège, car c'est une perte de temps (un vrai honeypot est plus pertinent) de plus cela montre au potentiel Hacker que ces essai sont plus ou moins fructueux et lui donne des indications.

Ensuite une chose me gêne :

Citation:
Bonjour, je code un CMS perso, ca m'évite d'utiliser une usine a gaz et c'est bon pour l'apprentissage , tout est au poil et là je viens de finir la partie relative à la sécurité j'aimerai avoir votre avis.
Tu as commencé à coder ton CMS sans penser à la sécurité ? La sécurité est l'élément que tu dois avoir en tête dans chaque script avant même de les écrire, pas uniquement sur des identifications. Dans se genre d'outil la sécurité est un tout il te faut donc penser "sécurité" du début à la fin.

Ensuite comme je l'ai lu dans plusieurs commentaire il faut que tu cloisonne un peu plus tes COOKIES, voir même que tu ne stocke rien dans les cookies mais que tu utilises une Table MySQL pour stocké les données en les liants à l'ID de session.

Mais pour cela tu dois faire en sorte que l'ID de session change à chaque page avec session_regenerate_id()

et aussi ceci :
Code :
1
2
3
4
5
6
7
8
 
//-- Interdiction d'agir sur le cookie en dehors de HTTP, donc pas d'alert(document.cookie)
ini_set('session.use_only_cookies',1);
//-- Pas de PHPSESSID dans l'url histoire de ne pas faciliter son vol
ini_set('session.use_trans_sid',0);
 
//-- Paramètre pour le cookie notamment très important pour le nom de domaine
session_set_cookie_params(0,'/','google.com',FALSE,TRUE);
Ensuite je continuerais par dire qu'aucune des protections que tu as mise n'est inutile oui le USER AGENT c'est faible, oui on peut spoofer des IP mais le tout ajouter commence à faire beaucoup.

Les "Script Kiddies" attention car ils sont de plus en plus nombreux et le plus triste c'est que le nombre d'outils simple d'utilisation pour faire des petits Hack explose et qu'ils sont à la portés de tous... Donc ne négligé pas la sécurité de vos applications et je dirais même faites contrôler vos sources voir pentester vos applis.

Cordialement,
__________________
Si vous débutez en PHP : Tutoriel pour grands débutants

Mes tutoriels : http://alexandre-joly.developpez.com/
Inazo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h46.


 
 
 
 
Partenaires

Hébergement Web