Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/03/2008, 12h36   #1
Invité de passage
 
Inscription : mars 2008
Messages : 1
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 1
Points : 0
Points : 0
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 :
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 :
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 :
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
tokimitsu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2008, 13h39   #2
Membre expérimenté
 
Homme Rémi BOURGAREL
Développeur .NET
Inscription : juin 2006
Messages : 426
Détails du profil
Informations personnelles :
Nom : Homme Rémi BOURGAREL
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : juin 2006
Messages : 426
Points : 584
Points : 584
Est ce que tu comprend bien ce qu'est le sql ? et l'acces a la base en php ?

Code :
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.
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2008, 17h15   #3
Membre éprouvé
 
Homme
Développeur informatique
Inscription : janvier 2005
Messages : 349
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 50
Localisation : Belgique

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

Informations forums :
Inscription : janvier 2005
Messages : 349
Points : 439
Points : 439
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.
beeboo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 12h57   #4
Membre expérimenté
 
Homme Rémi BOURGAREL
Développeur .NET
Inscription : juin 2006
Messages : 426
Détails du profil
Informations personnelles :
Nom : Homme Rémi BOURGAREL
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : juin 2006
Messages : 426
Points : 584
Points : 584
c'est a dire ?
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 13h50   #5
Membre éprouvé
 
Homme
Développeur informatique
Inscription : janvier 2005
Messages : 349
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 50
Localisation : Belgique

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

Informations forums :
Inscription : janvier 2005
Messages : 349
Points : 439
Points : 439
si dans le champ pass, je mets : " ' or 1 // ", ta requête devient :
Code :
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.
beeboo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2008, 13h25   #6
Membre expérimenté
 
Homme Rémi BOURGAREL
Développeur .NET
Inscription : juin 2006
Messages : 426
Détails du profil
Informations personnelles :
Nom : Homme Rémi BOURGAREL
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : juin 2006
Messages : 426
Points : 584
Points : 584
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
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2008, 14h15   #7
Membre éprouvé
 
Homme
Développeur informatique
Inscription : janvier 2005
Messages : 349
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 50
Localisation : Belgique

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

Informations forums :
Inscription : janvier 2005
Messages : 349
Points : 439
Points : 439
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 :
SELECT pass , pseudo FROM inscription where pass='$pass' AND pseudo = '$pseudo'"
devient
Code :
SELECT pass , pseudo FROM inscription where pass='' or 1 -- ' AND pseudo = '' or 1 --'
retourne tous les enregistrements de inscription
Citation:
... et verifier que ça te retourne bien un resultat.
Ca, pour retourner un résultat, ça en retourne.

la mienne :
Code :
select pass, pseudo from inscription where pseudo = '$pseudo'
devient
Code :
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.
beeboo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h29.


 
 
 
 
Partenaires

Hébergement Web