IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Cookies] Sécurité avec les sessions et actions importantes


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Points : 273
    Points
    273
    Par défaut [Cookies] Sécurité avec les sessions et actions importantes
    Bonjour,

    Je suis en pleine programmation d'un petit projet personnel. Possibilité de se créer un compte, de poster des news, des commentaires, etc.

    Je travaille beaucoup avec les sessions, et j'ai justement une variable session qui me donne le flag de mon utilisateur connecté. Par exemple, si le flag est x, l'utilisateur est un admin.
    L'admin peut poster, modifier ou effacer des news. Il peut aussi effacer les commentaires des utilisateurs.

    Vous comprenez, j'ai un peu peur pour la sécurité de mon site. J'ai l'impression qu'une personne malveillante pourrait tout à fait voler ma session, ou celle d'un supermodérateur, pour modifier le site. Bon, on s'entend, modifier les news ou effacer des commentaires, c'est pas super grave, mais c'est pour le principe.

    J'ai lu le début du tutoriel de sécurité des sessions (avec la BDD).

    Question #1: Est-ce que j'ai vraiment à m'en faire à propos des sessions ?
    Question #2: Si oui, est-ce qu'ajouter une fonction à la page de connexion pour ajouter la session à la BDD, et enlever l'entrée à la déconnexion, est assez ?

    Merci d'avance,

    Jihnn

  2. #2
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut
    Normalement c'est bon.

    Si par exemple tu utilises les cookies, là tu peux t'inquiéter et vérifier qu'il n'y a pas de failles XSS sur ton site.

  3. #3
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    une session EST un cookie. Plus précisement, l'ID de session est stockée dans un cookie. Se faire voler le cookie c'est se faire voler la session.

    Dejà, plusieurs choses :

    * Soit tes admin doivent se relogger a chaque fois => dans ce cas la le cookie a une durée de vie tres limitée (limité au seul temps de connection sur le site, le risque est faible)
    * Soit tu autorise une fonction "se souvenir de moi" et dans ce cas là tu augmente le risque, puisque le cookie peut persister 1 jour, 1 semaine, 3 mois, 2 ans... selon ce que tu parametre

    Ensuite, tu as 4 cas de vols je dirais :
    * L'acces physique a la machine. Tu peux pas y faire grand chose, mais le risque est faible, sauf en cas d'utilisation d'une machine publique (cyber café, etc...). Dans tout les cas, éviter de mettre l'ID de session en parametre d'une URL... tout passer dans des cookies c'est quand meme mieux
    * Le "man in the middle" : En gros un gars qui va sniffer les paquets qui passe et récuperer toutes les infos... si tu n'as pas un chiffre d'affaire de quelques millions avec 300 concurrents, le risque se limite a l'apprenti hacker qui veux se faire les dents... mais ca demande trop de matos pour lui (a moins d'etre sur un reseau local ;o)
    * La faille exploitée par un pirate
    Tu as une faille sur ton site qui permet de voler ton ID de session. echo $_GET['toto']; par exemple (et oui, c'est une faille ^^). Une personne mal intentionnée peut l'utiliser pour récuperer l'ID de session
    * La faille exploitée a son insu par le super utilisateur... uniquement si tu construit des URL avec l'ID de session en parametre. Le super admin veux montrer une page *publique* a de ses amis et copie/colle l'URL contenant... son ID de session => son ami pourra se connecter avec sa session.
    Plus méchant, il clic sur un lien externe... le site cible peut enregistrer l'adresse HTTP_REFERER d'ou il vient... qui peut contenir l'ID de session dans l'URL ;o)

    Se prémunir du vol de session ?
    -- sans impact pour l'utilisateur --
    => ne JAMAIS passer l'ID de session en parametre d'une URL
    => éviter d'avoir des failles de sécurité classique sur son site ;o)
    -- avec impact pour l'utilisateur (a pondérer selon ce que tu souhaites comme sécurité --
    => définir une durée de cookie la plus courte possible ;o)
    => implémenter des controles de session (par exemple lier une ID de session a une adresse IP. Si quelqu'un charge une session mais que son IP n'est pas celle qui a servie a créer la session... c'est qu'il y a vol... ou qu'il est derriere un proxy avec plusieurs point de sortie (par exemple AOL... pas de bol ^^))
    => implémenter des controles divers et variés. Tu peux enregistrer le type et la version du navigateur dans la session. Avec un peu de chance, le voleur n'aura pas la meme version du navigateur et tu pourras le detecter.

  4. #4
    Membre actif Avatar de chtipitou
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 175
    Points : 214
    Points
    214
    Par défaut
    tres bon article Fladnag, je prend note

  5. #5
    Membre actif Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Points : 273
    Points
    273
    Par défaut
    Merci beaucoup Fladnag.

    Pour l'accès physique et le "man in the middle", on peut pas faire grand chose j'imagine

    Mais tu donnes comme exemple "echo $_GET['toto'];", je ne comprends pas comment, avec celà, quelqu'un peut retrouver l'id de la session...

    Sinon, je ne mets jamais la session_id en paramètre.

    Par contre pour les cookies, c'est déjà un autre problème, j'aurais aimé compléter mon système en instaurant une fonction de ce genre... Par contre, un doute me vient à l'esprit : Est-ce que tu parles, par exemple, de mettre la session_id dans la valeur d'un cookie ? Par exemple, si je mettais seulement un cookie du genre "se_souvenir" avec valeur "true", "account" contenant le compte de l'utilisateur et "password" contenant le password (crypté évidemment :p), et que je connecte l'utilisateur via un script, y a-t-il un risque ?

    Merci encore,

    Jihnn

  6. #6
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Alors, a choisir, il vaut mieux mettre l'ID de session dans un cookie plutot que le login ou le pass, meme crypté ;o)

    Pour le echo $_GET['toto']; :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    page.php?toto=<script>alert(document.cookies);</script>
    Si tu fait ca, tu va executer du code javascript... qui va lire un cookie. Donc tu pourrais executer du code javascript qui redirige vers une page (le site du pirate) avec le cookie en parametre (rappel = le cookie contient l'ID de session !!)

    Ca s'appelle du CSS (Cross Site Scripting) ou CCS (Cross Code Scripting) ou XSS, bref, y a quelques acronymes, tu choisis celui que tu veux ;o)

    Apres, l'idée c'est d'envoyer un mail a un des membres contenant un lien piégé contenant l'URL "construite". Si le membre clic sur le lien, son ID de session sera envoyé sur le site du pirate, stockée, et le membre redirigé vers une page 404 de ton site, ni vu ni connu ;o)

    Pour s'en protéger... verifier TOUTES les variables qui viennent de l'exterieur ($_GET, $_POST, $_COOKIE, $_FILES) et dans le cas de l'exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo htmlentities($_GET['toto']);

  7. #7
    Membre actif Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Points : 273
    Points
    273
    Par défaut
    Ah oui, j'y avais pas pensé, même si je protège toutes mes variables :p

    Bon, alors je ne sais plus trop quoi faire pour le truc de "Se souvenir" maintenant :o

  8. #8
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Bah, apres ca c'est la theorie... en pratique, le "Se souvenir" est bien plus pratique que dangereux ;o) Rien ne t'empeche de mettre des cases "Se souvenir" avec des durées de cookies d'un ou deux mois pour tes utilisateurs "de base" qui ne peuvent que modifier leur données, et de mettre des cases "Se souvenir" avec des durées de cookies parametrables ou de durée inferieure (1 semaine, 2 jours) pour tes super utilisateurs, s'ils manipulent des données sensibles.

    Tu peux aussi implémenter le controle de l'IP pour des super utilisateurs... s'il n'y en a aucun chez AOL ;o)

  9. #9
    Membre actif Avatar de juliens9
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 192
    Points : 237
    Points
    237
    Par défaut
    Pour augmenter aussi la sécurité pense a bien configurer ton pare feu. SI tu as iptables, change bien les politiques de INPUT, OUTPUT et FORWARD;
    Cela evitera que l'on fasse des acces forcer a ton serveur pour pouvoir récuperer mots de passe et autre.

    Ensuite pense bien au code de turing et autre pour le controle des mots de passe et autre variable. Beaucoup de hack sont fait en utilisant des taches automatisés et des robots. Cela te permettra de lutter contre ce type d'attaque.

  10. #10
    Expert éminent
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Points : 9 031
    Points
    9 031
    Par défaut
    Bonjour

    Citation Envoyé par Jihnn Voir le message
    Pour le "man in the middle", on peut pas faire grand chose j'imagine
    Pour compléter cet excellent post de Fladnag : http://guillaume-affringue.developpe...rement/?page=2, lire cette page et la suivante, pour voir comment y remédier, et d'ailleurs l'article en entier parce qu'il est excellent lui aussi...

Discussions similaires

  1. Faille de sécurité avec les sessions ?
    Par goku19 dans le forum Langage
    Réponses: 8
    Dernier message: 19/03/2015, 14h00
  2. Sécurité avec les Sessions ?
    Par niavlys26 dans le forum Langage
    Réponses: 7
    Dernier message: 20/11/2009, 08h49
  3. Réponses: 4
    Dernier message: 06/05/2007, 11h07
  4. [Cookies] Problème avec les sessions PHP !!!
    Par boukay dans le forum Langage
    Réponses: 4
    Dernier message: 14/02/2006, 17h32
  5. [Sécurité] securite avec les sessions.
    Par krapoulos dans le forum Langage
    Réponses: 7
    Dernier message: 05/11/2005, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo