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 :

Système de comptes


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut Système de comptes
    Salut!
    En fait, je cherche à réaliser un système de comptes d'utilisateurs pour mon site, et ca marche assez bien.

    J'ai une BDD avec le pseudo et le mot de passe de chaques utilisateurs, ainsi que diverses autres informations. Sur chaque page, il a un include pour vérifier que l'utilisateur a sur son PC des cookies avec un mot de passe et un nom de compte correct.
    Il y a un second include avec le haut de la page, le titre, les boutons, et une zone pour rentrer le nom de l'utilisateur et son MDP (s'il est pas encore connecté, et que la variable pour le vérifier $compteok est donc, par défaut égal à 0) et l'envoie a une page qui crée a partir de ces infos deux cookies, un avec le MDP et un avec le nom de compte.

    Ensuite cette page a les même include que les autres, elle commence donc par poser les cookies puis après vérifie donc dans un include que le mot de passe et le nom de compte sont correct, alors $compteok = 1 et dans l'include suivant, si $compteok = 1 il affiche "Bonjour Nomducompte" a la place des champs pour se connecter.

    Le problème est le suivant : quand on rentre les informations pour se connecter, la partie devant dire "Bonjour X" a la place des champs de connexion ne change pas et il faut recharger la page pour que le cadre change.

    A part cela la page trouve correctement le nom de la personne qui se connecte, et vérifie correctement son MDP, partie que je pensais être la plus compliquée de mon script, mais finalement mon problème actuel est, pour moi, bien plus difficile à résoudre

    Je précise à chaques fois les includes parce qu'à un moment il m'avait sembler comprendre que mon problème venait de là mais je suis pas sur.
    S'il manque des infos ou que vous voulez voir du code, demandez moi.
    Merci encore, et désolez du manque de clarté que je dois avoir!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu dois avoir un problème logique dans ton enchainement d'action à ce niveau la :

    Ensuite cette page a les même include que les autres, elle commence donc par poser les cookies puis après vérifie donc dans un include que le mot de passe et le nom de compte sont correct, alors $compteok = 1 et dans l'include suivant, si $compteok = 1 il affiche "Bonjour Nomducompte"
    Si les choses etaient comme tu le decris, ca fonctionnerait.
    Je suppose que dans les variables que tu test pour afficher ou non "bonjour", il y en a qui sont declaré apres l'affichage.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Bonjour!
    C'est ce qu'il me semblait, mais pourtant je vois pas d'où vient le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    if (isset($_POST['pseudo']) AND isset($_POST['mdp']))
    {
    $timestamp_expire = time() + 7*24*3600; // Le cookie expirera dans une semaine
    setcookie('pseudo', $_POST['pseudo'], $timestamp_expire); // On écrit le pseudo
    setcookie('mdp', $_POST['mdp'], $timestamp_expire); // On écrit le mdp
    include("initphp.php");?>
    Là j'ouvre mon HTML et m'occupe de mon HEAD. Ensuite :
    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
    <body>
    <div id="header">
    [...] //Les images du menu du haut de la page
    <?php
    			if ($compteok == 1)
    			{
    			echo 'Bonjour!<br/>';	
    			}
    			else
    			{
    			echo 'Désolé. Je ne vous reconnais pas. Veuillez répétez ces infos!<br/>';
    			echo '<form action="login.php" method="post"><input type="text" name="pseudo" size="10" maxlength="30" value="Nom"/><input type="password" name="mdp" size="15" maxlength="30" value="Mot de passe"/><input type="submit" value="C\'est moi!" size="15" /></form>';
    			}
    			 ?>
    </div>
    [...]
    Et biensur le initphp.php :
    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
    18
    19
    20
    21
    22
    23
    <?php
    	$compteok = 0; // Variable de vérification du pseudo / mdp
     
    	if (isset($_COOKIE['pseudo']) AND isset($_COOKIE['mdp'])) // s'il y a les cookies mis à la connexion
    {	
    	mysql_connect("***", "***", "***"); // connexion a MySQL
    	mysql_select_db("***");
    	$listecomptes = mysql_query("SELECT * FROM compte ORDER BY ID"); // récupérer les infos des comptes enregistrés dans la BDD
     
    	while ($testcompte = mysql_fetch_array($listecomptes) )
    {
    		if ($_COOKIE['pseudo'] == $testcompte['Pseudo'] AND $_COOKIE['mdp'] == $testcompte['MDP']) // si le pseudo et le mot de passe corresponde dans la BDD
    	{
    			$compteok++; // Le compte est ok, compteok = 1
     
    			$pseudo = $testcompte['Pseudo'];
     
    	}
    }
     
    	mysql_close(); // Déconnexion de MySQL
    }
    ?>
    Merci.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pourquoi tu lis tous les comptes en les classant par ID pour verifier le login/pass ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Euh... bonne question, je pourrai utiliser un WHERE Pseudo=$_COOKIE['pseudo'] c'est ça? Mais qu'est ce que ca changerait finalement? Merci encore de m'aider.

  6. #6
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Points : 7 503
    Points
    7 503
    Par défaut
    Citation Envoyé par lv3895 Voir le message
    Euh... bonne question, je pourrai utiliser un WHERE Pseudo=$_COOKIE['pseudo'] c'est ça? Mais qu'est ce que ca changerait finalement? Merci encore de m'aider.
    le résultat final sera le même puisque tu aura ton authentification de faite cependant la méthode utilisé serai un poil plus rapide puisque ta clause de validité va limité d'embé le nombre de résultats ce qui pour des tables assez importante peux éviter de faire ramer un serveur pendant x min.
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    D'accord. Merci des renseignements. Mais pour l'instant il n'y aura pas plus d'une vingtaine de membre au début, et même je ne pense pas atteindre les 50 membres vu que le site est sur un sujet bien précis. Mais sur un projet plus grand je serais que cette méthode est plus rapide. Merci.
    Il reste toujours le problème de connexion. Pour illustrez mes propos je vous met le lien de la page : http://vulliard.free.fr/test/k/login.php
    Le nom de compte est Developpez et le mot de passe est aussi Developpez.
    En fait quand on rentre le mot de passe il nous dit qu'il est mauvais mais si on recharge la page et que le mot de passe qu'on a rentré était bon il est connecté...

  8. #8
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    salut,
    ce qui m'épate c'est personne ne dit rien sur la sécurité!
    déjà on ne stock jamais un mot de pass dans un cookie et encore moins en clair.
    et dans la base on ne met pas le pass en claire non plus.

    ensuite pour la requete faut bien faire attention et faire la clause where uniquement sur le login et ensuite comparer le mot de pass CRYPTE avec un if sinon c'est la faille de sécurité immédiate.

    le problème c'est que pour un accès utilisateur le mieux c'est un systeme de session et dans le cookie le SID de session. l'algorithme est un peu grand mais assez simple.
    http://php.developpez.com/cours/?page=securite#sessions


    en gros un algorithme vite fait bon c'est pour l'idée:
    script inclu partout
    :cookie
    on test s'il existe un cookie
    si oui goto:session
    sinon ben on a un invité goto:invité

    :session
    on test si sesson cookie est egale au SID
    si oui la session est ok goto:user
    sinon on poursuit
    on cherche la session correspondante au cookie
    si oui on recupère le user goto:user
    sinon ben encore un invité goto:invité

    :user
    on recupère ce qu'on a besoin
    :invité
    traitement fini

    script de connection
    apres envois du formulaire
    on cherche les données du login
    on test le pass crypté
    si oui goto:open session
    sinon goto:invité

    :open session
    un bon start session
    on memorise le SID dans un cookie
    on stock la session en base
    goto:user
    :user
    on recupère ce qu'on a besoin
    :invité
    traitement fini

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    ensuite pour la requete faut bien faire attention et faire la clause where uniquement sur le login et ensuite comparer le mot de pass CRYPTE avec un if sinon c'est la faille de sécurité immédiate.
    Quelle faille de securité est possible si on verifie le login et le mot de passe dans la requete ?
    Et pourquoi chiffrer plutot que d'utiliser MD5 ?

    ce qui m'épate c'est personne ne dit rien sur la sécurité!
    ce n'etait pas le sujet d'origine, c'est moi qui ait un peu devié
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    je sais que j'ai un poil fait hors sujet mais sur la sécurité autant pas faire les failles de base
    Citation Envoyé par sabotage Voir le message
    Quelle faille de securité est possible si on verifie le login et le mot de passe dans la requete ?
    Et pourquoi chiffrer plutot que d'utiliser MD5 ?
    si on fait une requete du type
    SELECT * FROM matable WHERE login='monlogin' and pass='monpass';
    et on test s'il y a un resultat uniquement
    un petit malin qui entre comme login: "monlogin and 1=1//" rendera ta requete valide et paf. évidemment c'est dans le cas ou on ne test rien au niveau des variables et la classe de requete.
    http://securite.developpez.com/faq/?page=dev_app

    sinon quand je disais chiffrer ca comprend le MD5 qui est suffisant pour un usage classique.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Ok merci des infos je vais regarder tout ca. La j'ai pas encore regarder tes liens Helfima, c'est peut être dedans mais c'est quoi que tu appelles le SID et je n'ai pas non plus compris comment crypter le MDP :p Il s'agit de la fonction crypt c'est ca? Mais je ne comprends pas son fonctionnement, si je crypte le mot de passe que je met dans la BDD, comprendra t-il quand même si je lui demande si le mot de passe que l'utilisateur tape en clair est égal au mot de passe crypté? Merci encore de votre aide.
    EDIT : Merci pour les liens, la partie sécurité m'a aider a comprendre un peu plus ce que tu voulais dire. Mais le problème de SQL Injection n'a pas l'air de se poser dans mon cas actuellement, et est-ce réellement utile de refaire mon script pour utiliser des sessions plutôt que les cookies si je les crypte? Merci. (Et le problème de base reste toujours d'actualité )

  12. #12
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    le SID = session_id

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Merci. J'ai compris pourquoi mon script n'était pas bon d'un point de vue sécurité, et j'ai compris comment faire pour en créer un bon. Mais j'aimerai bien quand même savoir pourquoi mon script ne fonctionne pas actuellement. Merci encore de votre aide.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Ah si, j'ai pas non plus vraiment compris le fonctionnement du MD5. Comment comparé une valeur crypté (comme le MDP dans la base) à une autre valeur (comme le MDP en clair ou crypté à son tour)? Pas comrpis
    Merci.

  15. #15
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    MD5 ne chiffre pas, il réalise juste une empreinte ; on ne peut pas, à partir de l'empreinte, reconstituer les données d'origine.

    Si tu places MD5("mot de passe saisie à l'inscription") dans la base, tu dois juste comparer cela avec MD5("mot de passe saisie pour se connecter").
    L'empreinte MD5 reste toujours la même.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Ok merci je comprends mieux. Et on m'a dit que mon système pourrait marcher si je mettait les vérifications et les cookies sur la même page avant d'envoyer comme ca quand j'arriverai sur la page les cookies seraient déjà mit en place mais dans ce cas là je sais pas comment récupérait en PHP ce qu'il rentre avant l'envoie vers la page de loggue... Je pense pas que ca doit être possible et là je comprends pourquoi la technique d'Helfima et mieux sur ce point de vue aussi. Je vais essayer de refaire mon script en suivant vos conseils je vous tiens au courant.

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Re-bonjour. J'ai enfin trouvé le temps pour essayer de refaire mon code en suivant vos conseils
    Si j'ai bien compris le début : L'utilisateur rentre ses identifiants
    On compare a ceux dans la BDD (en codant bien les mdp)
    Si c'est bon, ou ouvre une session où on rentre les infos de l'utilisateur récupéré dans la BDD. Et c'est la que la que je décroche :
    On met la même chose dans le cookie que dans la session. Pourquoi faire un cookie ET une session? Je comprends pas surtout si c'est pour mettre deux fois la même chose...
    2ème problème : "on stock la session en base". La je comprends pas ce que doit faire exactement avec la sessioon et la base. Et pourquoi mettre dans la base les sessions alors que toutes les informations sur la base doivent déjà être dans une table.
    Encore merci pour votre aide, surtout que je comprends pas vite!

  18. #18
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Heu je ne sais pas bien d'ou viennent les assertions que tu fais mais tu as juste besoin d'indiquer en Session que ton utilisateur est connecté.

    Apres il faut bien sur que ton site vérifie aux endroits ou il faut que l'utilisateur est bien authentifié.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Ah ok, je comprends mieux. Et je suit ce qu'à dit Helfima précédemment sur ce topic. Bon, je vais voir ca.

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Salut. Bon ben j'ai résolu mon problème de base. Sur l'ancien script On créer automatiquement un cookie, puis on vérifier que les données du cookie étaient aussi dans la BDD, la on vérifie d'abord que les données sont bonne et si elles le sont, ont récupère directement les infos et ont les mets dans un cookie avec lequel on vérifie après. J'ai aussi penser à crypter les mot de passe en md5. Merci de votre soutien.
    J'ai quand même une dernière question, mais le sujet n'est pas du tout le même, c'est d'ordre graphique. Je pense que je ferais mieux de faire un nouveau topic pour le nouveau problème, ca sera plus clair.
    Problème de système de comptes résolu.

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

Discussions similaires

  1. Comment créer un nouveau système de compte
    Par Oberown dans le forum Android
    Réponses: 1
    Dernier message: 10/06/2011, 11h21
  2. Réponses: 4
    Dernier message: 11/09/2010, 15h40
  3. Système de compte
    Par Syrmonsieur dans le forum Access
    Réponses: 4
    Dernier message: 24/12/2006, 00h55

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