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

PHP & Base de données Discussion :

[SQL] Système d'inscription/connexion


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Mars 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1
    Par défaut [SQL] Système d'inscription/connexion
    Donc voila, je demande votre aide pour un systeme d'Inscription/conection.
    Mon code pour la conection ne marche pas.

    Donc voici pour inscription.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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
        <head>
            <title>Mini-chat</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        </head>
        <style type="text/css">
        form
        {
        text-align:center;
        }
        </style>
        <body>
     
     
    <form action="redirection.php" method="post">
     Incription
    <p>
    Pseudo : <input type="text" name="pseudo" /><br />
    Password :  <input type="text" name="pass" /><br />
     
    <input type="submit" value="Envoyer" />
    </p>
     
    </form>
     
     <br><br><br>
     
     
     
        </body>
    </html>

    et donc elle amene a redirection.php, c'est une page de redirection, ou mon code mysql va enregistrer le pseudo et pass dans la base mysql
    Le voici :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
        <head>
            <title>Mini-chat</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
            <META http-equiv="refresh" content="5; URL=conection.php">
        </head>
        <style type="text/css">
        form
        {
        text-align:center;
        }
        </style>
        <body>
     
        <?php
    if (isset($_POST['pseudo']) AND isset($_POST['pass'])) // Si les variables existent
    {
        if ($_POST['pseudo'] != NULL AND $_POST['pass'] != NULL) // Si on a quelque chose à enregistrer
        {
            // D'abord, on se connecte à MySQL
            mysql_connect("serveur", "nom", "password");
            mysql_select_db("base");
     
            // On utilise les fonctions PHP mysql_real_escape_string et htmlspecialchars pour la sécurité
            $pass = mysql_real_escape_string(htmlspecialchars($_POST['pass']));
            $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
     
            // Ensuite on enregistre le message
            mysql_query("INSERT INTO inscription VALUES('', '$pseudo', '$pass')");
            echo " Vous etes inscris";
            // On se déconnecte de MySQL
            mysql_close();
        }
    }
     
     
     
    ?>
     
     
     
     
        </body>
    </html>

    Jusque ici, tout va bien .
    Mais c'est lors de la conection.
    Voici le code :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
        <head>
            <title>Mini-chat</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        </head>
        <style type="text/css">
        form
        {
        text-align:center;
        }
        </style>
        <body>
     
     
       <form action="conection.php" method="post">
     
    <p>
    Pseudo : <input type="text" name="pseudo" /><br />
    Password :  <input type="text" name="pass" /><br />
     
    <input type="submit" value="Envoyer" />
    </p>
     
    </form>
     
     
    <?php
    if (isset($_POST['pseudo']) AND isset($_POST['pass'])) // Si les variables existent
    {
        if ($_POST['pseudo'] != NULL AND $_POST['pass'] != NULL) // Si on a quelque chose à enregistrer
        {
            // D'abord, on se connecte à MySQL
            mysql_connect("serveur", "nom", "password");
            mysql_select_db("base");
     
            // On utilise les fonctions PHP mysql_real_escape_string et htmlspecialchars pour la sécurité
            $pass = mysql_real_escape_string(htmlspecialchars($_POST['pass']));
            $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
     
            // Ensuite on recupere les pseudo de la base
           $pseudobase = mysql_query("SELECT pseudo FROM inscription");
     
     
             if ($pseudo==$pseudobase) // On verifie si le pseudo existe dans la base
        {
                                $passbase  = mysql_query("SELECT pass FROM inscription WHERE possesseur=$pseudo"); // on récupere le mot de passe de la ligne du pseudo
     
                  	 if ($pass==$passbase) // On verifie si le pass correpond a celui de la base
       						 {
     
           						header("Location: index.php?pseudo=$pseudo"); 
     
     
      						  }
     
       				 else 
      						  {
        							 echo " votre mot de passe est incorrect";
       						  }
     
         }
          else 
      	 {
        	 echo " votre pseudo est incorrect";
       	}
     
     
     
            mysql_close();
        }
    }
     
     
     
     
    ?>
     
     
     
        </body>
    </html>

    Voila.


    Pourriez vous m'aidez svp ?
    merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Est ce que tu comprend bien ce qu'est le sql ? et l'acces a la base en php ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      // On utilise les fonctions PHP mysql_real_escape_string et htmlspecialchars pour la sécurité
      $pass = mysql_real_escape_string(htmlspecialchars($_POST['pass']));
      $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
     
      // Ensuite on recupere les pseudo de la base
      $pseudobase = mysql_query("SELECT pseudo FROM inscription");
     
     
      if ($pseudo == $pseudobase) // On verifie si le pseudo existe dans la base
      {
        Ici, tu selectionne tout les pseudo de ta base
        "SELECT pseudo FROM inscription" et apres tu les compare a un pseudo.
      }
    Pour faire une connexion, il faut faire un "SELECT pass , pseudo FROM inscription where pass='$pass' AND pseudo = '$pseudo'" et verifier que ça te retourne bien un resultat.
    Dernière modification par DaRiaN ; 04/03/2008 à 14h29. Motif: La balise code (#) aussi a de belles couleurs...

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2005
    Messages : 357
    Par défaut
    Salut,

    Tu utilises la fonction header() pour rediriger après avoir vérifié le login or avant tu as déjà produit des sorties html, la fonction header ne fonctionnera donc pas.
    Pour fonctionner, le header doit être le premier output produit par le code php (c'est logique puisque c'est un header) avant tout autre code HTML.

    @bourki : la méthode utlisée par tokimitsu est meilleure que la tienne pour éviter les injections SQL.

  4. #4
    Invité
    Invité(e)
    Par défaut
    c'est a dire ?

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2005
    Messages : 357
    Par défaut
    si dans le champ pass, je mets : " ' or 1 // ", ta requête devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT pass , pseudo FROM inscription where pass='' or 1 // ' AND pseudo = 'pseudo entré'
    et à ce moment là on retrouve le contenu complet de la table donc au moins un résultat valable pour le test et je rentre sur le site comme je veux.

    C'est pourquoi il vaut toujours mieux tester en deux fois même si cela oblige à ne pas utiliser SQL au mieux de possibilités.

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai juste filée la requète, j'ai pas filé le code qu'il y avait avant. De plus le code qu'il a donné ne marche pas donc oui niveau xss il est très fort ^^.

    EDIT : le commentaire en mysql c'est soit # soit -- : http://dev.mysql.com/doc/refman/5.0/en/comments.html

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2005
    Messages : 357
    Par défaut
    Autant pour moi pour le //, alors remplace le par # ou --. et tu auras l'effet voulu. C'est de cette façon que procèdent de nombreux robots pour aller polluer les cms et autres interfaces mal ficelés.

    pour:
    $pass = ' or 1 --
    $pseudo = ' or 1 --
    (à priori on injecte sur tous les champs)
    ta methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT pass , pseudo FROM inscription where pass='$pass' AND pseudo = '$pseudo'"
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT pass , pseudo FROM inscription where pass='' or 1 -- ' AND pseudo = '' or 1 --'
    retourne tous les enregistrements de inscription
    ... et verifier que ça te retourne bien un resultat.
    Ca, pour retourner un résultat, ça en retourne.

    la mienne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select pass, pseudo from inscription where pseudo = '$pseudo'
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select pass, pseudo from inscription where pseudo = '' or 1 --'
    retourne aussi toute la table mais la comparaison, dans un deuxième temps du premier pass du jeu de résultat avec " ' or 1 -- " donnera a très peu de chances d'aboutir à un résulltat true.

Discussions similaires

  1. [Système] Type de connexion ?
    Par grinder59 dans le forum Langage
    Réponses: 9
    Dernier message: 17/05/2006, 13h47
  2. Réponses: 5
    Dernier message: 30/03/2006, 13h38
  3. SQL-SERVEUR 2000 [debutant] connexion à la base
    Par ducho dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 17/03/2006, 10h05
  4. ADO + SQL Server + problème de connexion
    Par bchristo dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/12/2005, 17h08
  5. [SQL server 7.0] [connexion réseau]
    Par penchu dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/07/2005, 09h35

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