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é] A t'on besoin de prendre des précautions pour les variables de session ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut [Sécurité] A t'on besoin de prendre des précautions pour les variables de session ?
    Bonjour.

    Je me demandais s'il étais possible pour un utilisateur de renvoyer (mais est-ce lui qui les renvoie ?) des variables de sessions erronées, c'est à dire qu'il serais par exemple en mesure d'entrer des codes mysql (par exemple) dans une des lignes/cellules de la variable ?
    Je sait que c'est le cas pour les variables GET POST et pour les cookies, mais là, je me tâte (pas besoin d'utiliser une goudronneuse sur un sol en marbre...).

    bref, si vous avez une idée sur la question, merci de m'alléger (ou non) de certaines lignes de code.

    Au fait, question subsidiaire: quand je filtre des variables de type $_POST, j'applique le htmlentities(xxxx, ENT_QUOTES), mais je fait auparavant des comparaisons (if ou Switch) non protégées. est-ce que cela représente une faille ?(comment ça je suis parano )

    Merci

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Par défaut
    Normalement non, étant donnée que les variables de sessions sont intouchable.
    (enfin je pense, mais j'ai rien vue de tel sur internet et les sites qui traite de sécurité et de faille d'exploitation)

    phpSecure.info je pense que ça doit en parlé si ça existe

  3. #3
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Bonjour
    Les variables de session restent sur le serveur. Le seul risque qu'il y ait est au niveau de l'identifiant de session (tu pourras faire une recherche sur les attaques de type vol de session ou fixation de session si tu veux plus de détails).

  4. #4
    Membre émérite
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Par défaut
    ....Et encore, car l'identifiant de session reste sur le même domaine (pas de fuites vers l'extérieur....)

    Par exemple, si tu met en favoris une page munis d'un identifiant de session, l'identifiant est automatiquement retiré par PHP. Ainsi, lorsque on refait appel au favoris, il faut reprendre obligatoirement une session.

    Il y a par contre des risques si tu fais des test dans tes codes, du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if($_SESSION['login']=='ok'){
    header("Location :page.php?login=ok");
    exit();
    }
    Mais dans ce style d'utilisation, on est bien d'accord que la session est totalement inutile.....

    Bref, y a pas trop de risque avec les sessions, mais n'hésite pas à parcourire toute les pages du manuel PHP (voir ma signature) à ce sujet, il est extremement explicite, et donne des exemples de sécurisation de session.

    (Au lieu de parler de "sécurisation", je dirais plutot des habitudes de programmations.....)
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  5. #5
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par viviboss
    ....Et encore, car l'identifiant de session reste sur le même domaine (pas de fuites vers l'extérieur....)
    Je répète mon conseil alors : si ça t'intéresse renseigne-toi sur les attaques de type "vol de session" ou "fixation de session". L'ID de session transite dans les requêtes HTTP, il peut être intercepté, modifié, il est sensible à un man in the middle...
    Mais bon c'est sûr c'est pas du même niveau que de bidouiller une requête GET.

  6. #6
    Membre émérite
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Par défaut
    Citation Envoyé par Eusebius
    un man in the middle...
    ....Ou un "monkey in the middle", pour reprendre la terminologie d'un célèbre outil sous Linux, pour "tester" les failles réseaux !!!!
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  7. #7
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    désolé pour le décalage, je met du temps à poster.
    Citation Envoyé par viviboss
    Il y a par contre des risques si tu fais des test dans tes codes, du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if($_SESSION['login']=='ok'){
    header("Location :page.php?login=ok");
    exit();
    }
    heu, en quoi consiste ce risque ?

    car je fait bien des requetes de ce type avec des $_POST:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset($_POST['Login'])){
       if ($_POST['Login']==$quelquechose) {
          //je fait ce que je veut;
    }
    }
    cela comporte donc un risque ?

    merci.

  8. #8
    Membre émérite
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Par défaut
    Et bien, comme tu l'as dit plus haut, il est plus facile de trouver des failles dans des comportements GET et POST.

    Dans le cas quze je t'ai présenté, je vérifie le login avec une session, mais je transmet un "OK" en GET.....

    Donc je peu shunter la session : il suffit que je tappe dans mon navigateur directement la variable GET (on a header :page.php?login=OK, donc il suffit que je tappe dans mon navigateur cette adresse pour passer à travers....)

    A mon avis, si tu utilise des sessions pour un "login", il faut que tu reste en session jusqu'à la fin, et pas que tu change de méthodes en plein milieu.... (ca demande peut être un peu plus de temps à poffiner tes scripts, mais au moins tu gagne en sécurité.)

    Quand tu test ton login, s'il est bon, tu peux créé une nouvelle varialbe de session (exemple : $_SESSION['login']=1), et tant que cette variable n'hexiste pas ou n'est pas à 1, bas le client va pas plus loin.....Donc tu force tes clients à passer par ta gestion de login, et vu qu'ils ne peuvent pas voir à quoi ressemble tes variables de session, ils ne peuvent pas le shunter !!!!

    une bonne méthode à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if($_SESSION['login']=='ok'){
    header("Location :page.php?login=ok");
    exit();
    }
    c'est ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if($_SESSION['login']=='ok'){
    header("Location :page.php".strip_tags(SID));
    exit();
    }

    là, je gère le passage de session. Et dans page.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if(isset($_SESSION['login']) && $_SESSION['login']=="ok"){
    //na bla bla bla bla
    }else{
    //si la session n'est pas active
    header("location :index.php");
    exit();
    }
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  9. #9
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    j'ai regardé là dessus: est il obligatoire de faire ceci, ouest-ce par défaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     session.use_trans_sid=0
    ?

    esuite, j'ai bien trouvé cela, mais je crois que là, la barre est un peu (et inutilement haute pour moi).

    sinon, qu'en est-il pour ma deuxième question ?

    merci.

Discussions similaires

  1. besoin des expressions pour les requêtes d"access
    Par omar1992 dans le forum Access
    Réponses: 1
    Dernier message: 09/08/2014, 22h09
  2. Réponses: 0
    Dernier message: 23/03/2009, 12h41
  3. [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Par Celenor dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 28/03/2004, 01h28

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