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 :

Sécurité des cookies


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Points : 760
    Points
    760
    Par défaut Sécurité des cookies
    Bonjour,

    je suis en train de développer un site pour lequel j'essaie de sécuriser un maximum d'élément car il a vocation à devenir assez important.

    Je me penche sur l'utilisation des cookies pour l’authentification des membres, et j'aimerai vos avis sur ma méthode de sécurisation utilisée.

    Je stocke comme valeur de cookie ces élément là sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $email_du_membre."_".$_SERVER['HTTP_USER_AGENT']."_".$_SERVER["HTTP_ACCEPT_LANGUAGE"]."_".gethostbyaddr($_SERVER['REMOTE_ADDR'])
    ce qui me donne :
    monemail@mondomaine.com_Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0_fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3_dec69-2-82-228-97-26.fbx.proxad.net
    Et je crypte tout ça pour avoir un resultat final de ce type :
    ntOhlp6Xos9zoqafmqDRl87Ul2HG0Z2GY4V/1K7Mo82Sk2hfYVZhupyjm6CtpISEuYZoYZSdUL2FvGiZb4Op12uYaV9hX1mqmJiioGVjlGeVlmNjlIJ2z6jKmNSskmuXX5RTXlGcq4+Zp2R3iGzVc5WUal/I0F27iaCjomSRbI2W0m6ibmZnllNiV5WblJpvkphfa5WPYphukmucYZVtj5fGq1+hqKjblJlln5ul
    Pour authentification utilisateur, je décrypte, j'explode, je compare les variables d'environnement et si jusque là tout est bon, je compare ces 4 champs avec la BDD.

    Pensez-vous que cette méthode soit assez sécurisée, si non, que me conseilleriez-vous ?

    Merci d'avance pour vos réponses.

    Geoffrey.


    EDIT: Ajout d'une étape oubliée.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    La réponse à ta question se trouve ici : http://stackoverflow.com/a/17266448/393984

    Pour résumer sa réponse très claire et détaillée :

    Il faut au moment de l'identification créer un token pour l'utilisateur que tu stock dans ta base.
    Dans ton cookie tu stock un couple utilisateur:token + un hash de l'ensemble permettant de vérifier sa validité

    A l'identification tu vérifie le tout.

    Exemple en pseudo code extrait du lien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function onLogin($user) {
        $token = GenerateRandomToken(); // generate a token, should be 128 - 256 bit
        storeTokenForUser($user, $token);
        $cookie = $user . ':' . $token;
        $mac = hash_hmac('sha256', $cookie, SECRET_KEY);
        $cookie .= ':' . $mac;
        setcookie('rememberme', $cookie);
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function rememberMe() {
        $cookie = isset($_COOKIE['rememberme']) ? $_COOKIE['rememberme'] : '';
        if ($cookie) {
            list ($user, $token, $mac) = explode(':', $cookie);
            if (!hash_equals(hash_hmac('sha256', $user . ':' . $token, SECRET_KEY), $mac)) {
                return false;
            }
            $usertoken = fetchTokenByUserName($user);
            if (hash_equals($usertoken, $token)) {
                logUserIn($user);
            }
        }
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Points : 760
    Points
    760
    Par défaut
    J'ai oublié une étape dans mon message, je vérifie, avant la requête BDD, que toutes les variables d'environnement contenu dans le cookie soit identique.

    Mon but c'est de ne pas pouvoir modifier manuellement le cookie, et de ne pas pouvoir le transférer sur une autre machine.


    J'ai peut être pas tout compris dans le message de stackoverflow, mais qu'est-ce qui empêche, dans cette méthode, de copier manuellement le cookie sur une autre machine ?

    Je vais déjà remplacer le-mail par un token, ce sera déjà une sécurité en plus.

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Rien n’empêche effectivement de déplacer le cookie sur une autre machine et d'être loggué.
    Pour parer à ça il suffit que ton token prennent en compte des paramètres clients par exemple. Mais ça reste pas infaillible. Suffit de se retrouver avec la même config et ça passe pareil.

    Le but premier de la sécurisation des cookie c'est surtout que l'utilisateur X ne puisse pas se logguer en tant que Y en modifiant son cookie. Mais rajouter une notion "environnemental" est également très intéressante.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/11/2008, 19h20
  2. Délai d'expiration des cookies
    Par Sylvain James dans le forum XMLRAD
    Réponses: 40
    Dernier message: 22/03/2006, 10h22
  3. Gestion des cookies avec Indy 10
    Par membrax dans le forum Web & réseau
    Réponses: 5
    Dernier message: 21/09/2005, 18h44
  4. maj des cookies
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 08/09/2005, 09h31

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