PHP Sessions Securiser

Répondre
Lefounard
le 25/07/2007 à 16:26
Lefounard
Bonjour,
Voila je voudrais sécuriser ma partie administration du site avec les sessions php, donc j'ai trouvé quelques exemples sur le net. Et j'ai realiser ca :

login.php
<?php
session_regenerate_id();
$_SESSION['initiated'] = true;
$_SESSION['level'] = 'admin';
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);

/* Creation de la fingerprint cote serveur */
$string = $_SERVER['HTTP_USER_AGENT'];
$string .= 'N0S3s510nH4cK1NG';
$fingerprint = md5($string);

/* redirection sur l'accueil administration */
echo '<a href="index.php?n='.$fingerprint.'">Entrer Admin</a><br />';
?>


Bon on définie, une fingerprint qui sera transmit par GET entre les pages securise.

pagesec.php
<?php
/* Anti attaque par SESSION ID -----------------------------------------------------------------------------*/

if (!isset($_SESSION['initiated']))
{
echo 'Session non initialisé<br />';
echo 'Pour des raisons de sécurité, nous vous demander de vous connecter<br />';
echo '<a href="login_admin.php">connexion</a>';

/* Formulaire de connexion */

/* a Mettre dans la connexion */
/*session_regenerate_id();
$_SESSION['initiated'] = true;*/
}

echo '<br /><br />------------------------------------------------------------------<br /><br />';

/* Securiser PHP SESSIONS contre SID Attack */
/* Si la variable de session du navigateur est definie */
if(isset($_SESSION['HTTP_USER_AGENT'])){

/* Creation de la fingerprint cote serveur */
$string = $_SERVER['HTTP_USER_AGENT'];
$string .= 'N0S3s510nH4cK1NG';
$fingerprint = md5($string);

/* Si la fingerprint a deja été definie */
if(isset($_GET['n'])){
/* Si la fingerprint du client correspond a celle cote serveur, peu de risque de detournement de SID */
if(trim($_GET['n']==$fingerprint)){
echo 'Authentification correcte';
}
else {
echo 'Fingerprint non correspondante<br />';
echo 'Pour des raisons de sécurité, nous vous demander de vous connecter<br />';
echo '<a href="login_admin.php">connexion</a>';

/* Formulaire de connexion */

}
}
else {
echo 'Fingerprint non définie.<br />';
echo 'Pour des raisons de sécurité, nous vous demander de vous connecter<br />';
echo '<a href="login_admin.php">connexion</a>';
/* Formulaire de connexion */
}
}
else
{
echo 'Variable de sessions http user agent non définie.<br />';
echo 'Pour des raisons de sécurité, nous vous demander de vous connecter<br />';
echo '<a href="login_admin.php">connexion</a>';

/* Formulaire de connexion */

/*echo 'user agent NON defini';
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);*/
}

/*----------------------------------------------------------------------------------------------------------------------------*/
?>


Et ca, c'est le controle en debut de page.
En fait cela permet d'eviter une attaque par fixation de session (pagesec.php?PHPSESSID=numero) et aussi une attague par detournement de session, quelqu'un se fait passer par quelqu'un d'autres, d'ou l'interet de la fingerprint base sur le md5 du useragent et le md5 d'une chaine de caractere pris au pif.
Pouvez vous me conseiller sur la sécurité des sessions, et pensez vous qu'il y a mieux ou plus simples ?
Merci de vos conseils,
Ciao,
I am singing in the rain , I am happy again !!
Bzh
le 26/07/2007 à 15:20
Bzh
Il ne faut pas non plus tomber dans la paranoîa :p !

En effet, il y a une chose que l'on peut sécuriser dans les sessions, c'est le vol de session (par l'intermédiare d'attaque XSS par exemple ).

Dans ce cas, il est necessaire d'ajouter dans une variable de session des infos comme la signature du navigateur, la résolution de l'affichage du navigateur ( attention, javascript necessaire) ou bien simplement l'adresse ip !

Cela permet de vérifier que la session appartient bien à celui qui s'est identifié en comparant les configs...

Mais sinon, évitons de tomber dans la paranoîa, les sessions ont été conçus justement afin de proposer une solution sérieuse pour identifier des visiteurs.

Si tu ne sais plus quoi faire pour t'occuper pendant ton stage, Lefounard, j'ai plein de boulo à te proposer :p ....

Bye...
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours