Espace membre, sessions et sécurisation en PHP

WRInaute accro
Bonjour,

J'ai créé mon premier espace membre à la main comme un grand.
J'ai surement du laisser des trous de partout.
Auriez vous des tutos ou recommandations pour sécuriser un espace membre ?
Notamment : quelle est votre fonction/routine pour vérifier que l'utilisateur est bien connecté (et qu'il n'a pas usurpé une identité) ? Quelles sont les vérifications à faire ?

Merci à tout ceux qui auront pris le temps de lire ce message.
 
WRInaute discret
Bonjour

1er pas :
dans la 1er page tu vérifie est ce le login existe , si oui vérifie le mot de passe ; si correspondant à login tu crée un session avec le nom ou l'id de ce utilisateur
exemple détaillés içi : http://www.phpdebutant.org/article69.php

2éme pas :
dans les autres pages tu vérifie est ce que le session qui tu as crée n'existe pas, si oui tu rediriger la page vers la page d'index avec une message d'erreur

exemple : ( ce code doit dans le tête de page ) ( 'pseudo' est nom de session )
Code:
<?php
session_start();
error_reporting(E_ALL ^ E_NOTICE);
if(!session_is_registered("pseudo")){
header("Location: accueil.php?pass=err");
 }
?>

lire aussi ce topic : http://www.siteduzero.com/tutoriel-3-14563-variables-superglobales-ses ... okies.html

bonne journée
 
WRInaute accro
Merci j'ai du mal m'exprimer.
J'ai déjà codé l'espace et je me contente de vérifier les sessions de la même manière que tu le proposes mais ça me semble beaucoup trop léger.
Il me paraît un peu facile de bidouiller les sessions pour se faire passer pour un membre, non ?
De plus, jee n'ai pas de protection contre un bot qui ferait volontairement planter le serveur avec des requêtes en masse sur le formulaire d'inscription.
 
WRInaute accro
On ne connait pas ton code de login / sessions:

1) Code commun à toutes les pages avec identification:
Code:
<?php
$fingerprint = 'MySecretFingerPrintingKeyHoooohooo'.$_SERVER['HTTP_USER_AGENT'].$_SERVER['HTTP_ACCEPT_CHARSET'];
$fingerprint = md5($fingerprint.session_id());
?>

2) Au login correct, tu enregistres ce $fingerprint en session:
Code:
<?php 
$_SESSION['fingerprint'] = $fingerprint;
?>

3) Pour vérifier l'usurpation de session, sur toutes les pages où tu dois vérifier la session:
Code:
<?php 
if($_SESSION['fingerprint'] != $fingerprint){
	//logout forcé
}
?>

Edit: sinon il y a PEAR::Auth:
http://pear.php.net/manual/en/package.authentication.auth.intro.php
http://pear.php.net/manual/en/package.authentication.auth.auth.setadva ... curity.php
 
WRInaute accro
Ah donc ce que je fais est suffisant donc (j'ai ajouté l'IP dans ce "fingerprint").

Bon, c'est si simple que ça. Merci.
 
WRInaute accro
Par contre, une fois le membre connecté et vérifié, lors de la génération des pages, quelles variables utiliser ? Par exemple si je veux faire sa page de profil, puis je sans crainte procéder comme ceci :
Code:
<h1>Profil de <?php echo $_SESSION['login']) ?></h1>
Càd en faisant confiance aux sessions et en stockant les infos dedans ?
Ou alors je fais une requete pour aller chercher dans la base l'info depuis l'id du membre ?

Merci
 
WRInaute passionné
Tu peux y stocker quelques infos de base, mais n'abuse pas trop, c'est stocké dans des fichiers il me semble.
Le plus simple reste d'y stocker l'identifiant, pseudo et mot de passe que tu peux vérifier avec la base de données sur quelques pages clés.
Il faut trouver un compromis pour économiser quelques requêtes.
 
WRInaute accro
Bonsoir

Je ne savais pas qu'il était possible de simuler une session, c'est-à-dire connaître la valeur et le nom de la variable de session.

Comment peut-on faire semblant d'avoir une session correcte, avec une variable de session forgée ?

Merci beaucoup de vos réponses.

Jean-François Ortolo
 
WRInaute passionné
Simuler, non, par contre s'il y a une faille sur le site (injection de code), le hacker peut récupérer l'id de la session des personnes tombant sur ce code, il peut ainsi se faire passer pour eux. (d'où l'intérêt du "fingerprint", une empreinte de ton ordinateur avec quasi aucune chance de retrouver la même chez le hacker)
 
WRInaute accro
Robinson a dit:
Simuler, non, par contre s'il y a une faille sur le site (injection de code), le hacker peut récupérer l'id de la session des personnes tombant sur ce code, il peut ainsi se faire passer pour eux. (d'où l'intérêt du "fingerprint", une empreinte de ton ordinateur avec quasi aucune chance de retrouver la même chez le hacker)


Bonsoir Robinson

Bon, mais à supposer que quelqu'un ait le nom et la valeur de l'identificateur de session d'une autre personne, et que cet identificateur de session suffise à authentifier la personne...

Cet identificateur de session, doit bien être contenu dans une variable de session ( par exemple $_SESSION['id'] ) au moment où le hacker parcourt le site ?

Alors, comment le hacker va-t-il alimenter cette variable de session, vu qu'il n'a aucune action possible sur les variables de session durant le parcours de ce site, vu que la session n'est valable que pour ce site ?

Merci beaucoup de vos réponses.

Amicalement.

Jean-François Ortolo
 
WRInaute accro
ortolojf a dit:
Alors, comment le hacker va-t-il alimenter cette variable de session, vu qu'il n'a aucune action possible sur les variables de session durant le parcours de ce site, vu que la session n'est valable que pour ce site ?
Regarde le lien que j'ai cité plus haut, c'est expliqué.
En bref, on peut voler une session avec le paramètre PHPSESSID en _GET ou en cookie.
 
WRInaute accro
spout a dit:
@Robinson, oui je sais, mais c'est toujours d'actualité et efficace non ?


Bonsoir spout

Le lien que tu donnes ( méthodes de sécurisation des sessions par ce Monsieur Américain ), indique bien qu'il est possible de deviner l'identificateur de session ( par exemple PHPSESSID ) quand celui-ci est transmis en GET.

Mais... En fait ce cas ne se produit que quand le navigateur client n'accepte pas les Cookies, *et* quand le site attaqué accepte que l'identificateur de Session soit mis dans l'url.

Dans le cas où le site n'accepte pas de connections si les Cookies sont refusés, il n'y a théoriquement plus aucun moyen de deviner l'identificateur de Session ?

Du moins, le lien que tu as donné, indique que certaines versions de Internet Explorer ont une faille qui permet cela, de deviner les identificateurs de Session contenus dans des Cookies,mais il n'indique pas comment faire celà.

Celà dit, c'est vrai que ça ne mange pas de pain d'appliquer cette méthode de sécurisation, et que j'ai soigneusement noté sur mon ordinateur, la méthode que tu indiques. ;)

Merci beaucoup de tes réponses.

Amicalement.

Jean-François Ortolo
 
WRInaute accro
@ortolojf, avec les cookies aussi c'est pareil.
Regarde les entêtes HTTP qui passent en clair sur le réseau, Set-Cookie: PHPSESSID=...
 
WRInaute accro
Je ne comprends pas, le fingerprint est attribué lors du login comme tu as indiqué spout, mais dès que je quitte la page de login, la session le contenant se vide (aucune autre session ne se vide). Je n'y comprends rien.
 
Discussions similaires
Haut