Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
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 28/11/2006, 10h46   #1
Invité de passage
 
Inscription : janvier 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 5
Points : 1
Points : 1
Par défaut [Sécurité] Script de login / pass avec sessions

Hello,
J'ai un probléme sur la gestion des sessions.
J'ai une base sql composée de cette sorte :
Code :
1
2
3
Table membres : 
username -> varchar 
password -> varchar
Dedans, j'ai inseré juste deux entrées : test/test
ensuite, je peux prendre les informations suivantes :

J'ai une page de connection en html suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 <html>
 <head>
 <title>login.html</title>
 </head>
 <body>
 <form name="login" method="post" action="verif_auth.php">
 Nom d'utilisateur:<input type="text" name="user_name"><br>
 Mot de passe:<input type="password" name="password"><br>
 <input type="submit" value="Envoyer">
 </form>
 </body>
 </html>
Je ne fait juste un post sur verif_auth.php
Jusque la, tout va bien.
Maintenant je tente de récuperer les données suivantes :

verif_auth.php :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
<?php
$user_name = $_POST['user_name'];
$password = $_POST['password'];
session_start();
 
$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion'.mysql_error());
mysql_select_db('base', $db) or die(mysql_error());
 
$query = "SELECT * FROM membres WHERE user_name=''.$user_name.'' AND password=''.$user_name.''";
 
$result = mysql_query($query, $db);
$affected_rows = mysql_num_rows($result);
 
if($affected_rows == 1) {
 print 'Vous êtes authentifié';
 
$_SESSION 'username' = $user_name; }
 else {
 print 'Accès refusé';
}
?>
Mais ... j'ai une page blanche. Je suis allé chercher un peu partout sur le net, mais je n'arrive pas a mettre le doigt sur cette simple erreur.

merci de votre aide
atomcomputer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 10h54   #2
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
et si tu fais un echo($query)??!! tu te rendras compte que ton code ne fonctionnera jamais

essaye plutot ca :
Code :
1
2
$user_name = "'".$_POST['user_name']."'";
$password = "'".$_POST['password']."'";
et surtout ca
Code :
$query = "SELECT * FROM membres WHERE user_name=$user_name AND password=$password";
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 11h33   #3
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Salut

Et puis ceci n'est pas trés fonctionnel :

Table membres :
username -> varchar
password -> varchar

Code :
1
2
$query = "SELECT * FROM membres WHERE user_name=''.$user_name.'' AND password=''.$user_name.''";
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 11h59   #4
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
c vrai, j'avais pas fais attention à ca aussi.
en fait je lui avais corrigé une erreur sans le signaler
Code :
$query = "SELECT * FROM membres WHERE user_name=''.$user_name.'' AND password=''.$user_name.''";
bon dans ce cas ta requete pourra etre
Code :
$query = "SELECT * FROM membres WHERE username=$user_name AND password=$password"
sans oublié les
Code :
1
2
$user_name = "'".$_POST['user_name']."'";
$password = "'".$_POST['password']."'";
un conseil de ma part : en cas de problème, essaye tjs d'afficher tes requetes, de voir ce qui ne va pas, et n'hesite pas de les exécuter à la main sur la base de données. Comme ca tu pourra identifier de la partie qui deconne car c pas tjs php (parfois c mysql, parfois php mais tres tres souvent (99,99%) nous meme).
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 12h30   #5
Membre régulier
 
Étudiant
Inscription : juillet 2006
Messages : 147
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2006
Messages : 147
Points : 75
Points : 75
Envoyer un message via MSN à Henry9 Envoyer un message via Yahoo à Henry9
Citation:
Nom d'utilisateur:<input type="text" name="user_name"><br>
mmmh, l'apostrophe devant utilisateur peut probleme probleme, non ?

Code :
1
2
$user_name = "'".$_POST['user_name']."'";
$password = "'".$_POST['password']."'";
je comprend pas l'intêret de mettre une quote "' et '" à la fin.

Normalement une simple déclaration tel que
Code :
$user_name = $_POST['user_name'];
devrai pas poser de problème
Henry9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 13h46   #6
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
Citation:
Normalement une simple déclaration tel que
Code :
$user_name = $_POST['user_name'];devrai pas poser de problème
c'est malheureusement toute la différence entre devrait et va pas poser de problème. Moi je dis que ca va poser problème : tu n'as qu'à essayer un truc genre
Code :
insert into maTable(var_varchar) values (toto);
et tu verras jeune homme que mysql va gueuler un bon coup avec un truc genre :
Citation:
Unknown column 'toto' in 'field list'
et il ne va pas la fermer que si tu fais
Code :
insert into maTable(var_varchar) values ('toto');
d'où mes apostrophes!!!
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 14h35   #7
Invité de passage
 
Inscription : janvier 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 5
Points : 1
Points : 1
mmmh, a force de trifouiller le code, je me suis fait avoir par moi même.
En fait, je vient de tester, il renvoit bien les bonnes valeurs du post, mais j'ai toujours une page blanche

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
<?php
session_start();
$user_name = "'".$_POST['user_name']."'";
$password = "'".$_POST['password']."'";
 
include('mysql.inc.php');
mysql_select_db('base', $db) or die(mysql_error());
 
 
$query = "SELECT * FROM membres WHERE user_name=$user_name AND password=$password"; 
echo($query);
 
 
$result = mysql_query($query, $db);
$affected_rows = mysql_num_rows($result);
 
 
 if($affected_rows == 1) {
 print 'Vous êtes authentifié';
 
 $_SESSION 'user_name' = $user_name; }
 else {
 print 'Accès refusé';
 }
 
 ?>
Sachant que $db provient de mon include.
La base est maintenant comme ça :
Code :
1
2
3
 
user_name   	varchar(15)  	
password  	varchar(15)
Cependant, j'ai isolé le probléme. Il survient lors de la boucle du fond ( si je commente, mon echo passe bien ).

Avec le code commenté de cette sorte :
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
<?php
session_start();
$user_name = "'".$_POST['user_name']."'";
$password = "'".$_POST['password']."'";
 
include('mysql.inc.php');
mysql_select_db('iforco', $db) or die(mysql_error());
 
 
$query = "SELECT * FROM membres WHERE user_name=$user_name AND password=$password"; 
echo($query);
 
 
$result = mysql_query($query, $db);
$affected_rows = mysql_num_rows($result);
echo '<br>'; 
echo($result); 
echo '<br>'; 
echo($affected_rows);
 
 /*
if($affected_rows == 1) 
 {
 print 'Vous êtes authentifié';
  $_SESSION 'user_name' = $user_name; 
  }
 
  else {
 print 'Accès refusé';
 }
*/
?>
J'obtient ceci comme réponse :
Citation:
SELECT * FROM membres WHERE user_name='test' AND password='test'
Resource id #4
1
Je comprend pas le ressource id # 4
par contre, cela devrai fonctionner puisque avec test/test j'ai bien comme sortie 1 ... et 0 avec un mauvais pass.

Merci de toute votre attention et conseil ! !
Edit, je pense que cela vient de la session, je suis allé voir sur le site de php5 pour la documentation, mais je n'ai pu trouver d'informations concluante sur mon probléme
atomcomputer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 14h48   #8
Invité de passage
 
Inscription : janvier 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 5
Points : 1
Points : 1
MMmh, je vais finir par en faire plein des requétes sur ce pauvre serveur sql avec tout les méssage que je vous laisse.
L'érreur vient bien de
Code :
$_SESSION 'user_name' = $user_name;
pourtant au début de mon code j'ai
Est ce que cela pourrai venir du fait que $user_name retourne 'test' et non test ?
atomcomputer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2006, 14h53   #9
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
tu sais ce qui est le plus difficile quand on repond à un message de ce genre : c'est quand celui qui pose la question ne sait pas ce qu'il cherche!

je m'explique : à quoi ca peut te servir de faire quelque chose du genre absolument rien, du coup je vais pas commenter ta question
Citation:
Je comprend pas le ressource id # 4
revenons aux choses serieuses : quand tu executes il t'affiche 1, c'est parfait ca veut dire que ca fonctionne, il est où le problème

en voyant ca :
Code :
$_SESSION 'user_name' = $user_name;
je me dis pour l'amour du ciel faites une petite recherche sur internet avant de poster sur ce forum
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2006, 09h23   #10
Invité de passage
 
Inscription : janvier 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 5
Points : 1
Points : 1
Salut,
en fait, je me suis répondu a la question pour le result sql, je suis partit trops vite en besogne.
Pour le script, il fonctionne, mais la session ne marche pas.
J'ai rajouté :
$utilisateur = "".$_POST['user_name']."";

et
$_SESSION 'utilisateur' = $utilisateur;
car en fait, je voudrai que utilisateur soit égal a son nom ( donc test ) en l'occurence.

Je suis allé matter la doc sur les sessions, mais je comprend pas pourquoi je ne peux pas stoker une variable entiére.
Code :
1
2
3
 
http://www.php.net/manual/fr/function.session-start.php
$_SESSION['time']    = time();
atomcomputer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2006, 09h40   #11
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
Code :
$_SESSION 'utilisateur' = $utilisateur;
tu es sur que t'as lu un truc sur les sessions?!
bon je repondrai à ton message mais apres je laisse la main aux autres
Citation:
$_SESSION['time'] = time();
ce bout de code fonctionne tres bien et je ne sais pas qui t'as dis que les sessions ne peuvent stocker un entier?!
par contre remplace ce truc
Code :
$_SESSION 'utilisateur' = $utilisateur;
par ca
Code :
$_SESSION['utilisateur'] = $utilisateur;
une derniere chose quand je t'ai dis de mettre
Code :
$user_name = "'".$_POST['user_name']."'";
je repondais encore à ton problème de requete et pas les sessions

bon courage
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2006, 09h45   #12
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Directeur technique
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
donc

Code :
$_SESSION 'user_name' = $user_name;
devrait s'ecrire :

Code :
$_SESSION['user_name']= $user_name;
rien de bien compliqué

Edit : Me suis fais prendre de vitesse (le temps de lire ce topic un peu tout zazimut...lol)
__________________
Pas de questions techniques en MP please

Mon site perso
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2006, 09h58   #13
Invité de passage
 
Inscription : janvier 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 5
Points : 1
Points : 1
ça roule ! Je vous remercie beaucoup !
Je vais faire plus attention a la syntaxe la prochaine fois.
merci !!
atomcomputer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h17.


 
 
 
 
Partenaires

Hébergement Web