Sersessions > class php5 pour gerer les sessions simplement (protection xss)

Soyez le premier à donner votre avis sur cette source.

Vue 8 639 fois - Téléchargée 828 fois

Description

Class en PHP5 qui permet de sécuriser les sessions automatiquement.

Vérifie :
- l'IP
- le nom du navigateur
- le temps de la sessions
- le referer

Un élément pour les paranoïaques permet de régénérer un ID de session a chaque récupération de la session en cours

Source / Exemple :


<?php
require "session.class.php";
// $Session = new session($sessionName, $timeOut, $timeCookie, $cacheLimit,  $idReg, $csrfFix) 
// str $sessionName : Nom du cookie de la session
// int $timeOut : Timeout de la session
// int $timeCookie : Temps du cookie (0 pour session)
// int $cacheLimit : Cache de la session
//				 0 => 'public', 1 => 'private', 2 => 'nocache'
// bool $idReg : Regénère un id de session à chaques appels
// bool $csrFix : Sécurité pour le Cross Site Request Forgeries
$Session = new session();

//écriture dans la session :
$_SESSION['offset'] = "valeur";
// Ou
$Session['offset'] = "valeur";
// Ou
$Session -> offset = "valeur";

//lecture dans la session
echo $_SESSION['offset'];
// Ou
echo $Session['offset'];
// Ou
echo $Session -> offset;

//suppression dans la session
unset($_SESSION['offset']);
// Ou
unset($Session['offset']);
// Ou
unset($Session -> offset);

//vérification avec isset 
isset($_SESSION['offset']);
// Ou
isset($Session['offset']);
// Ou
isset($Session -> offset);

?>

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

aKheNathOn
Messages postés
285
Date d'inscription
dimanche 22 juillet 2001
Statut
Modérateur
Dernière intervention
5 décembre 2013
-
Classe sympa, partie sécurisation est assez bien faite. Quelques détails, REMOTE_ADDR est générée par apache contrairement à HTTP_X_FORWARDED_FOR et HTTP_CLIENT_IP qui sont dans les entêtes HTTP. Vu que tu les priorises, j'ai qu'à définir une entête HTTP_X_FORWARDED pour te faire croire que c'est mon IP. Un patch possible serait de prendre en compte les deux :

private function get_IP_Reel() {
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
return $_SERVER["REMOTE_ADDR"].$_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif (isset($_SERVER["HTTP_CLIENT_IP"])) {
return $_SERVER["REMOTE_ADDR"].$_SERVER["HTTP_CLIENT_IP"];
} else {
return $_SERVER["REMOTE_ADDR"];
}
}

Afin d'aller plus loin dans la sécurisation, tu devrait également t'intéresser aux failles CSRF (http://www.phpcs.com/codes/PROTECTION-CONTRE-FAILLES-CSRF-CROSS-SITE-REQUEST-FORGERIES_49233.aspx) car après acquisition d'une session, on peut faire à partir d'un site pirate n'importe quelle action, or le principe d'une session est de stocker des données à partir du site navigué, donc si l'appel provient d'un autre domaine, la session devrait être regénérée.

Bonne prog,
Akh
cs_Astalavista
Messages postés
194
Date d'inscription
lundi 24 décembre 2001
Statut
Membre
Dernière intervention
3 février 2010
-
Merci de ton commentaire :)

Je vais appliquer ta modification au code source.
Sinon pour les failles CSRF je pense utiliser le $_SERVER['HTTP_REFERER'], vu que ceux-ci sont fournit par le navigateur du client et que tous les navigateurs "sécurisé" l'utilisent. Qu'en pense tu ?
aKheNathOn
Messages postés
285
Date d'inscription
dimanche 22 juillet 2001
Statut
Modérateur
Dernière intervention
5 décembre 2013
-
Oui c'est largement suffisant vu que l'exploit se passe sur une machine en principe "sure".

Après cette modif, ta classe permet une sécurisation béton contre le vol de sessions ou bien contre les attaques CSRF - ça couvre pas mal de failles du coup :)

Je vais certainement l'utiliser pour mes devs ;)
webdeb
Messages postés
509
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
1 -
Mwai ta source est loin d'être au top...

1/ Les constantes de configuration n'ont rien à faire à l'extérieur de ta classe. A la rigueur tu peux utiliser des variables statiques ou bien simplement des propriétés de la classe. Tu peux aussi fournir un tableau au constructeur de la classe qui va initialiser ta session.

2/ L'indentation est complètement déguinglée... C'est illisible !

3/ Tu fais un self::Securise() alors que ta méthode Securise() n'est pas déclarée statique. Tu dois faire un $this->Securise() dans ce cas.

4/ Les noms de classes et de méthodes en français, c'est loin d'être super. Ca limite grandement la diffusion et l'utilisation de ton code au plus grand nombre.

5/ Il serait bien de pouvoir setter les valeurs dans des namespaces comme le font certains framework. Par exemple :

public function setAttribute($name, $value, $ns = '/user/session')
{
$_SESSION[$ns][$name] = $value;
}

6/ Il manque des méthodes utiles du type hasAttribute()

7/ En PHP 5, le destructeur c'est __destruct()

8/ Ta sécurité anti CSRF n'est pas terrible. Il faudrait plutôt sauver dans la session le hash md5 ou sha1 d'une chaîne. Par exemple :

$_SESSION['salt'] = md5(session_id().rand(0,9999999);
$_SESSION['_csrf_token'] = sha1($_SERVER['HTTP_USER_AGENT'].$salt.$_SESSION['REMOTE_ADDR']);

A chaque nouvelle session tu contrôles le _csrf_token grâce à la salt connue. Si ce n'est pas bon tu jettes une EXCEPTION et si elle est juste, tu régénères un nouveau token pour la page courante.

++
webdeb
Messages postés
509
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
1 -
Dans mon exemple $salt c'est $_SESSION['salt'] ;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.