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
Bon on définie, une fingerprint qui sera transmit par GET entre les pages securise.
pagesec.php
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,
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,