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 :

Contrôles suffisants ?


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut Contrôles suffisants ?
    Bonjour,

    j'aimerai bien avoir une petite précision quant à l'utilisation des sessions.

    Je crée un espace accessible avec accès restreint : login+mot de passe.

    Une fois que la personne se logue correctement, je garde en session le login.

    Pour naviguer d'une page à l'autre, quels contrôles sont à faire par rapport au login et au mot de passe ?
    Est-ce que sur chacune des pages je dois vérifier à chaque fois si les variables de session de login et de mot de passe sont toujours cohérentes ou est-ce qu'une fois logué, il n'y a plus besoin de vérification pour naviguer de page en page ?

    Merci

  2. #2
    Membre habitué
    Inscrit en
    Février 2007
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 156
    Points : 131
    Points
    131
    Par défaut re
    Salut, une fois que tu as créé la session, pas besoin de vérifier sur chaque page le login et le mot de passe, tu vérifie simplement si la session est présente ou non et tu créé ton code en conséquence.

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (!isset($_SESSION['masession']))
    {
     
    redirection....ou autre
     
    }
    Si tu ne vérifie pas, quelqu'un qui connait le nom de tes pages peux très bien taper directement l'adresse sans passer par la page d'identification.

  3. #3
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 476
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 476
    Points : 4 687
    Points
    4 687
    Par défaut
    salut,
    pour ma part, je fais ainsi :
    si l'utilisateur s'est loggue correctement, je crais une variable de session (par exemple $_SESSION["connected"]=1; )
    et apres, dans toutes mes pages protegees, 2 lignes de codes suffisent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if($_SESSION["connected"]!=1)
    {
    //redirection vers page login
    }
    edit : ah zut, quelqu'un plus rapide

  4. #4
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Et ben merci pour la rapidité de vos réponses ! ^^

    Une petite précision :

    > si je suis pas loggué : redirection
    > ELSE j'affiche mon code

    ou

    > si je suis pas loggué : redirection
    > affichage de code sans else

    juste un if() ou un if() else () ?

  5. #5
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Bonjour

    En complément, ne pas oublier l'essentiel en début des différentes pages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    session_start();
    ?>


    Citation Envoyé par baggie Voir le message
    juste un if() ou un if() else () ?
    La deuxième solution est plus avenante, mais les 2 sont possibles.

  6. #6
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 476
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 476
    Points : 4 687
    Points
    4 687
    Par défaut
    bah tu peux mettre un else { //tout ton code }
    mais personnellement, je le fais pas car ca encombre mon code
    au pire, si ton header ne suffit pas, a la fin de ton if, tu fais un exit(); et ca arrete le script (le reste de ton code)

  7. #7
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Oui ça c'est prévu sans aucun problème !

    Et en plus de ma question ci-dessus, le session_destroy() se fait où exactement ? sur toutes les pages ? uniquement en cliquant sur le lien de déconnexion (ou après inactivité du user) ?

    EDIT : ok Doksuri ! Merci

    EDIT 2 : ah les edits des edits ... Bon bah je vais voir ce que je fais pour mes if/else ou if du coup x)

  8. #8
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 476
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 476
    Points : 4 687
    Points
    4 687
    Par défaut
    le session_destroy, tu le fais uniquement sur ta page de deconnexion... sinon tu detruis ta session a chaque fois, et par la meme occasion, tes variables desession avec

  9. #9
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    C'est bien ce qu'il me semblait (mais y'a des fois où je préfère être sûre plutôt que de faire nawak et tout planter ^^) !

    Merci à tous =)

  10. #10
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 65
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par eveilside Voir le message
    Salut, une fois que tu as créé la session, pas besoin de vérifier sur chaque page le login et le mot de passe
    Dans ce cas l'usurpation d'identité de la session peut-être aisée. non ?

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Doksuri evite le if($_SESSION["connected"]==1)

    Oui et le modifier attention ! C'est ce qui fait tout le danger des failles XSS, si quelqu'un réussi à injecter du XHTML dans les pages d'un site il pourra mettre un code JavaScript qui lira les cookies du visiteur (et comme l'identifiant de session (sessid) est dans 99,9% des cas stocké dans un cookie, JS pourra lire le sessid du visiteur), pour ensuite récupérer le sessid du visiteur et l'envoyer de manière transparente au serveur du pirate (via AJAX par exemple). Si un admin exécute le script, le pirate récupérera donc l'identifiant de session de l'admin. Connaissant le sessid de l'admin, le pirate pourra ensuite modifier son propre cookie, où est stocké son sessid, pour mettre le sessid de l'admin qu'il a volé, dans ce cas il aura volée la session de l'admin, et sera connecté sous son nom.
    Donc attention aux sessions
    la solution serait de :
    1, Securiser tes sessions, enregistrer tes membres dans une BDD
    Stocker le MDP de la session en MD5 et stocker l'ip dans une session.
    comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if($_SESSION['user_ip'] != $_SERVER['REMOTE_ADDR']) {
    kick_les_fesses();
    }
    Mais attention aux IP changeantes trouve une bonne solution, enregistre par exemple la version du navigateur & de l'OS (via javascript)

    et apres a chaque page verifiez le couple LOGIN/MDP via la Base de donnee
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM user WHERE username=toto AND passwd=7170137921322462406284";
    (le mot de passe etant encrypté en MD5 dans ta BDD )

    [EDIT]
    Je suis de bonne humeur aujourd'hui, je vais te préparer un petit script simple pour la vérification des membres:
    Requis : petite connaissance de MySQL et l'avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    session_start(), //je l avais oublie celui la xD
    if(!isset($_SESSION['user_name']) && $_SESSION['user_password'])) {
        header("Location: login.php"); } else { 
    //Preparation de la requete d'amour ;) je suppose que tu as deja fait mysql_connect()
        $user_name = mysql_real_escape_string($_SESSION['user_name']);
        $user_password = mysql_real_escape_string($_SESSION['user_password ']);
        $sql = "SELECT * FROM ta_table_user WHERE user_name=$user_name AND user_password=$user_password LIMIT 1";
            if(mysql_query($sql)) { //Succes 
                 echo "Connecte"; 
            } 
            else {
                 echo "Pas connecte";
                 kick_les_fesses();
                 exit;
             }
    ?>

  12. #12
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 476
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 476
    Points : 4 687
    Points
    4 687
    Par défaut
    merci Pgm_snipe pour ces precisions,
    je vais donc changer ma facon de faire =)

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    pas de problème, de plus je vous conseille d'utiliser un cryptage pour vos sessions (elles sont "normalement" inaccessibles)
    Pour encoder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $typecodage= MCRYPT_MODE_NOFB;
    $codage = MCRYPT_BLOWFISH;
    $taillcle = mcrypt_module_get_algo_key_size($codage);
    $tailleiv= mcrypt_get_iv_size($codage, $typecodage);
    $iv= mcrypt_create_iv($tailleiv, substr("test juste",0,$iv_size));
    $cle= "Ceci est la clé du cryptage, plus elle est longue, mieux c'est mais c'est plus lent";
    $cle= substr($cle, 0, $key_size);
    $texte= "Nom de l utilisateur a crypter";
    $_SESSION['user_name'] = mcrypt_encrypt($codage , $cle, $texte, $typecodage, $iv);
    // Décryptage
    $dechiffre = mcrypt_decrypt($codage , $cle, $_SESSION['user_name'], $typecodage, $iv);
    Aide cryptage dans les cours et tutoriels PHP : http://php.developpez.com/cours/

    ou encore plus simple : combiner le nom d'utilisateur dans une session, le crypter en BASE64 (facilement décryptable):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $userdata = "$username|||$user_password"; //le ||| est le delimiteur pour le explode qui suit ;)
    $userdata = base64_encode($userdata);
    $_SESSION['user_data'] = $userdata;
     
    //Maintenant pour decrypter la session ;) :
    $decrypt = base64_decode($_SESSION['user_data']);
    $decrypt = explode("|||", $decrypt);
    $username = $decrypt[0];
    $userpassword = $decrypt[1];

  14. #14
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut


    Pgm_snipe réinvente les sessions php ou quoi ?

    Puis, quand je lis :
    Mais attention aux IP changeantes.....
    Pardonnez-moi... je souris

    Pas d'autres commentaires !

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Je ne fais qu'aider des gens qui ont poser une question, relis bien le sujet , il traite de sécuriser au minimum une zone membre avec des sessions (son choix), en aucun cas je ne les "reinvente".
    Quand aux IP changeantes, renseigne toi.
    Et puis pour ton sourire, content de te rendre heureux

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 64
    Points : 42
    Points
    42
    Par défaut
    pardon de m'inclure dans la discussion.. mais il y a quoi a part les sessions pour sécurisé un accès ?

  17. #17
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Citation Envoyé par DeeVoiD Voir le message
    pardon de m'inclure dans la discussion.. mais il y a quoi a part les sessions pour sécurisé un accès ?
    Les systèmes de gestion de session (php) sont efficaces ... quand ils sont utilisés dans les règles de l'art, et en vérité, il n'y a pas plus simple.
    Je ne vois rien d'autre pour le moment de plus pertinent, et je me sentirais bien orphelin à défaut.

    Quant aux ip changeantes, et pour répondre à l'imagination précédente, je ne vois pas en quoi celà peut interférer, vu qu'une session ne dure que le temps d'une connection.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment empêcher la mise à jour d'un contrôle à l'écran ?
    Par JojoLaFripouille dans le forum Composants VCL
    Réponses: 4
    Dernier message: 19/09/2003, 12h52
  2. Codes de contrôle des imprimantes
    Par hetzel dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 21/03/2003, 17h17
  3. [ActiveX] Propriété "Picture" dans un contrôle util
    Par Ricou13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/12/2002, 15h59
  4. [contrôle] dbDateTimePicker ???
    Par Fizgig dans le forum Composants VCL
    Réponses: 2
    Dernier message: 28/11/2002, 15h45
  5. [Kylix] Contrôle DBGrid
    Par KThrax dans le forum EDI
    Réponses: 1
    Dernier message: 10/05/2002, 14h18

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