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 23/05/2006, 10h35   #1
Membre à l'essai
 
Inscription : mai 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 171
Points : 21
Points : 21
Par défaut [Sécurité] Problème de session

Je viens de lire un post plus bas au sujet des sessions et j'ai vu qu'il fallait mettre ce code pour verifier qu'une variable appartient bien à une session

<?php
if(isset($_SESSION["prenom"])) {
echo "La variable prenom est déjà enregistrée !";
} else {
echo "La variable prenom n'est pas enregistrée !";
// On est cerntain d'y avoir accès ici
}
?>


Mon problème est que j'ai mis une page de connexion avec un login et mot de passe et elle "protege" l'accès au site. Mais si je rentre directement la page dans la barre d'adresse je peux y accéder sans rentrer de login ni de mot de passe.

Quel est la solution pour eviter ca ? Je dois rentrer le code ci dessus dans chaque page ?

Merci d'avance pour votre aide ! ( Je ne connais pas grand chose sur les sessions, je viens juste de m'y mettre)
Sandara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 10h39   #2
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög


oui le code que tu as mis doit être mis sur chaque page où tu as besoin de contrôler l'accès
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 10h39   #3
Membre expérimenté
 
Inscription : avril 2006
Messages : 462
Détails du profil
Informations personnelles :
Âge : 33
Localisation : Canada

Informations forums :
Inscription : avril 2006
Messages : 462
Points : 556
Points : 556
Envoyer un message via MSN à rbaatouc Envoyer un message via Skype™ à rbaatouc
si tu peux y rentrer sans te connecter c'est un pb de securité grave
tu dois dans chacune de tes pages a securisé mettre un session_start en tout debut et verifié que ta valeur de session est bien renseigné
par exemple si tu te connecte avec login et mdp et que tt est ok tu peux enregistré la la varible de session login comme suit $_SESSION['login'] = $login.

puis dans chacune de tes pages tu fais
if(!isset($_SESSION['login']) || $_SESSION['login']=="")
{
//traitement derreur,
soit un header qui redirige
soit un message derreur suivi d'un exit etc
}
rbaatouc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 10h41   #4
Membre à l'essai
 
Inscription : mai 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 171
Points : 21
Points : 21
Merci beaucoup, c'est bien ce qu'il me semblait !
Sandara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 11h18   #5
Membre à l'essai
 
Inscription : mai 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 171
Points : 21
Points : 21
J'ai rentré ce code dans ma page haut.php ( elle est apellée dans chaque page du site par un require ) :

Code :
1
2
3
4
5
6
7
8
9
 
<?
session_start();
 
if(!isset($_SESSION['login']))
{
	require("indexfaux.php");
}
?>
Donc maintenant il me met bien une erreur si je ne suis pas loggué et que j'essaye de passer directement par la barre d'adresse, mais il m'affiche tout de meme la page que je tape dans la barre en dessous de ma page indexfaux.php

Cela peut venir d'ou ?
Sandara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 11h20   #6
Membre expérimenté
 
Inscription : avril 2006
Messages : 462
Détails du profil
Informations personnelles :
Âge : 33
Localisation : Canada

Informations forums :
Inscription : avril 2006
Messages : 462
Points : 556
Points : 556
Envoyer un message via MSN à rbaatouc Envoyer un message via Skype™ à rbaatouc
c'est nomal car il execute ton if puis continue lexecution de la page
soit tu fais un header vers la page derreur (header location)
soit tu met un exit qui stop tout

ma prefrence va au header
rbaatouc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 11h29   #7
Membre à l'essai
 
Inscription : mai 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 171
Points : 21
Points : 21
Comment ca un header ? Je pensais que le require vers ma page indexfaux.php suffirais a ne pas ouvrir la page demandée sans login et mot de passe.

Ma page indexfaux correspond a la page d'identification avec un msg derreur de connexion.

Qu'est ce que je dois rajouter dans le code pour que ca ne m'envoie que la page d'erreur et que ca bloque l'acces au site ?
Sandara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 11h33   #8
Membre expérimenté
 
Inscription : avril 2006
Messages : 462
Détails du profil
Informations personnelles :
Âge : 33
Localisation : Canada

Informations forums :
Inscription : avril 2006
Messages : 462
Points : 556
Points : 556
Envoyer un message via MSN à rbaatouc Envoyer un message via Skype™ à rbaatouc
le require va juste afficher ta page je crois come un include puis executera le reste de ta page normalement alors que le header redirige ta page mais il faut qu'aucune entete ne soit envoyé avant

<?
session_start();
if(!isset($_SESSION['login']))
{
header("Location: /indexfaux.html")
}
?>
rbaatouc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 11h46   #9
Membre à l'essai
 
Inscription : mai 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 171
Points : 21
Points : 21
J'ai bien rajouter le code, mais le probleme maintenant c'est que ca m'envoie sur la page qui correspond au header meme qd je valide ma connexion. dc je n'ai plus acces au site à la premiere connexion, comme s'il m'envoyait au header avant que je me connecte à une session ...
Sandara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 11h48   #10
Membre expérimenté
 
Inscription : avril 2006
Messages : 462
Détails du profil
Informations personnelles :
Âge : 33
Localisation : Canada

Informations forums :
Inscription : avril 2006
Messages : 462
Points : 556
Points : 556
Envoyer un message via MSN à rbaatouc Envoyer un message via Skype™ à rbaatouc
tu peux montrer le code des 2 pages : la page de connection et celle tu as inseré le code quon ta donné
rbaatouc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 11h56   #11
Membre à l'essai
 
Inscription : mai 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 171
Points : 21
Points : 21
Code de ma page de connexion :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<form action="connexion_bdd3.php" method='POST' style="width: 100%; margin-top: 24px; margin-bottom: 48px;">
<fieldset style="padding-top: 8px; padding-bottom: 8px; width: 40%; margin-left: auto; margin-right: auto;">
<legend class="fontcolor3" style="font-variant: small-caps;">Identification</legend>
<table style="width: 100%; border: 0;" cellpadding="5" cellspacing="0">
<tr>
<td style="text-align: right; width: 40%; font-variant: small-caps;">Identifiant</td>
<td style="text-align: center; width: 60%;"><input type="text" name="log"></td>
</tr>
<tr>
<td style="text-align: right; width: 40%; font-variant: small-caps;">Mot de passe</td>
<td style="text-align: center; width: 60%;"><input type="password" name="pass"></td>
</tr>
</table>
<input type="submit" name="submit" value="Valider" style="font-variant: small-caps;">
</fieldset>
</form>

Code de ma page haut comprise dans toutes les pages du site :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
 <?
 
session_start();
 
if(!isset($_SESSION['login']))
{
header("Location:indexfaux.htm");
}
 
?>

L'image en annexe correspond au bout du code de ma page de connexion
Sandara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 11h58   #12
Membre à l'essai
 
Inscription : mai 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 171
Points : 21
Points : 21
Est ce que tu as besoin de mes autres pages de connexion ? Celles qui vont chercher dans la BDD ?
Sandara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 12h06   #13
Membre expérimenté
 
Inscription : avril 2006
Messages : 462
Détails du profil
Informations personnelles :
Âge : 33
Localisation : Canada

Informations forums :
Inscription : avril 2006
Messages : 462
Points : 556
Points : 556
Envoyer un message via MSN à rbaatouc Envoyer un message via Skype™ à rbaatouc
si je comprends bien ta logique

index.php permet de se connecter (image)
ton formulaire de conn va sur connexion_bdd3.php qui fais les vérification
2cas :
si c'est ok tu vas sur ta page membres (avec le pti bout de code en debut)
sinon tu retourne a laccueil avec un message derreur

au lieu de faire un header sur indexfaux, tu na qua faire un header vers ta page de connection et si en bonus tu veux le message derreur tu le met en get que tu recupere

exemple erreur de login :

page connexion_bdd3.php>
header(location : index.php?erreur=login)

page index.php >
tu recupere avec $_GET['erreur'] (sans oublier de verifier lexistence etc)
if(isset($_GET['erreur']) && $_GET['erreur']=='login") echo "mauvais login";
rbaatouc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 12h11   #14
Membre à l'essai
 
Inscription : mai 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 171
Points : 21
Points : 21
Voir message suivant
Sandara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 12h14   #15
Membre expérimenté
 
Inscription : avril 2006
Messages : 462
Détails du profil
Informations personnelles :
Âge : 33
Localisation : Canada

Informations forums :
Inscription : avril 2006
Messages : 462
Points : 556
Points : 556
Envoyer un message via MSN à rbaatouc Envoyer un message via Skype™ à rbaatouc
au lieu des index.php tu met ta page connexion.php
rbaatouc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 12h15   #16
Membre à l'essai
 
Inscription : mai 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 171
Points : 21
Points : 21
Ma page connexion.php m'envoie vers ma page connexion_bdd3.php qui elle verifie que la connexion avec la BDD se fait bien et que le login et mdp sont les bons. S'il sont bons alors la page ouvre la session et envoie vers une page d'administration; s'ils sont faux alors ca m'envoie vers indexfaux.php a travers un require.
Ca c'est tout ce qui gere ma connexion à partir de ma page connexion.


Ensuite j'ai rajouter le code dont on parle avec le isset dans chaque page (excepté la page de connexion ...) grace a ma page haut.php


Le probleme c'est que maintenant il me redirige vers la page d'erreur meme si je rentre le bon login et mdp ... :s
Sandara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 12h19   #17
Membre expérimenté
 
Inscription : avril 2006
Messages : 462
Détails du profil
Informations personnelles :
Âge : 33
Localisation : Canada

Informations forums :
Inscription : avril 2006
Messages : 462
Points : 556
Points : 556
Envoyer un message via MSN à rbaatouc Envoyer un message via Skype™ à rbaatouc
monte le code de ta page connexion_bdd3.php
rbaatouc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 12h23   #18
Membre à l'essai
 
Inscription : mai 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 171
Points : 21
Points : 21
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
 
<?
	require("connexion_bdd2.php");
?>
<?
 
 
  $loginOK = false;
 
//récupération du login en supprimant les espaces parasites (en début et en fin de chaine)
$login=trim($_POST['log']);
 
//récupération du mot de passe en supprimant les espaces parasites
$passwd=trim($_POST['pass']);
 
// Vérification champ de saisie non vides !
  if (!empty($login)) 
    {
      if (!empty($passwd))  
	    {
 
//Création d'une requete SQL de sélection de l'utilisateur
$req = "SELECT *
		FROM utilisateur 
		WHERE login='$login'";
$cherche=mysql_query($req) or die('erreur d\'identification');
 
//et récupération du résultat dans un tableau
 
$trouve = mysql_fetch_assoc($cherche);
 
 
//vérification du mot de passe
		if($trouve['mdp']==$passwd)
			{
				$loginOK = true;
			};
		};
	};
 
 // Si le login est correct on ouvre la session
 
  if ($loginOK==true) 
    {
 
	$_SESSION['login'] = $trouve['login'];
	$_SESSION['statut'] = $trouve['statut'];
	$_SESSION['nom'] = $trouve['nom'];
	$_SESSION['prenom'] = $trouve['prenom'];
	require("administration.php");
	}
 
  else
	{
		require("connexionfaux.php");
	};
 
 
 
?>

Le require connexion_bdd2 sont les infos de connexion au serveur ( host...)
Sandara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 12h26   #19
Membre à l'essai
 
Inscription : mai 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 171
Points : 21
Points : 21
Je crois avoir trouvé, je n'ai pas ouvert le session_start dans connexion_bdd3.php

C'est bien ca ?

A ben non meme pas, avec ce session_start dans connexion_bdd3 je px a nouveau acceder a toutes mes pages en tapant la page dans la barre d'adresse sans avoir a me conecter

Et en plus maintenant que je l'ai rajouté j'ai le msg d'erreur suivant qui apparait
Notice: A session had already been started - ignoring session_start() in c:\program files\easyphp1-7\www\grh191\haut.php

(la page s'affiche qd meme, mais j'ai ce msg d'erreur tout en haut )
Sandara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 12h34   #20
Membre expérimenté
 
Inscription : avril 2006
Messages : 462
Détails du profil
Informations personnelles :
Âge : 33
Localisation : Canada

Informations forums :
Inscription : avril 2006
Messages : 462
Points : 556
Points : 556
Envoyer un message via MSN à rbaatouc Envoyer un message via Skype™ à rbaatouc
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
require("connexion_bdd2.php");
//récupération du login et mdp en supprimant les espaces parasites (en début et en fin de chaine)
$login=trim($_POST['log']);
$passwd=trim($_POST['pass']);
 
// Vérification champ de saisie non vides !
if (!empty($login) && !empty($passwd))  
{
//Création d'une requete SQL de sélection de l'utilisateur
$req = "SELECT *
FROM utilisateur
WHERE login='".addslashes($login)."' and mdp='".addslashes($passwd)."'";
$cherche=mysql_query($req) or die('erreur d\'identification');
 
if(mysql_num_rows($cherche) == 1)
{
    //et récupération du résultat dans un tableau
    $trouve = mysql_fetch_assoc($cherche);    
    $_SESSION['login'] = $trouve['login'];
    $_SESSION['statut'] = $trouve['statut'];
    $_SESSION['nom'] = $trouve['nom'];
    $_SESSION['prenom'] = $trouve['prenom'];
    header("location :administration.php");
}
else
{
//aucun enregistrement pour ce login/mdp
header("location :connexionfaux.php");
}
?>
jai un peu modifié ton code, ça devrait etre ok comme ça
tu nes pas obligé de faire des verifation empty mais bon, tu peut aussi directement tarité tes $_POST sans passé par des varibles intermediaire

et favorise le <?php plutot que le <?
rbaatouc 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 18h30.


 
 
 
 
Partenaires

Hébergement Web