Site partenaire
 IP Scan :
Home
  Accueil
SH en favoris
- FORUMS -
Livre d'Or
- CHAT -
NewsLetter
Suggestions
La Team du Site
Accès Team SH
Faites un don !
Contacts
 
Services
  Liens
Source HTML viewer
DownLoad
Mail Anonyme
 
Les Articles
  Cracking
Théorie
Programmation
Failles [techniques]
Les Adresses IP
FingerPrinting
Utilisation de proxy
Divers
 
WallPapers Galerie
   
Partenaires
  The Hackademy Web, Journal et School

 
 Main Message
 
Le recrutement au sein de la Team SH est suspendu pour une durée indéterminée...

Pour surfer sur ce site, vous devez accepter le disclaimer.

Vous pouvez contribuer au développement du site en faisant un don. SecurityHack a besoin de vous !

 
 Comprendre et utiliser les sessions php4
 
Salut à tous,

Salut à tous,

enfin un article sur la sécurité informatique digne de ce nom ;) En effet, je vais vous exposer dans cet article la technique de protection de vos pages web, notamment utilisées pour les parties membres ou d'administration. Il s'agit des sessions en php4

Tout d'abord, il faut comprendre les sessions, c'est un procédé à part entière qui utilise ses propres variables pouvant être enregistrées uniquement lors de l'activation des sessions.

Toute la sécurité se situe au niveau des variables, le principe est simple : lors de l'authentification, on vérifie les login et pass, et si l'auth est correcte, on enregistre une variable session qui pourra contenir ce que l'on veut. Sur une page protégée, il suffira simplement de vérifier si la variable session que l'on a choisi est existe (enregistrée) ce qui signifiera que l'authentification a été faite ou pas.
Les sessions php4 se distinguent des sessions php3 par l'absence de cookie. En effet, les données seront stockées sur le serveur (base de données), dans une zone généralement réservée aux sessions. Lors de l'activation d'une session, un identifiant appelé "id session" sera mis en mémoire, c'est cette idée qui permettra de reconnaitre ou non la session en cours.


Passons maintenant à la pratique.
Tout d'abord, activons la session :

<?
session_start();
?>


Ce code doit se trouver tout en haut de chaque page sous peine de faire planter le script. Meme un simple commentaire html se trouvant avant se code pourrait tout faire planter.

Enregistrons maintenant une variable session qui contiendra par exemple l'id session.

 <?
session_start();                            //activation de la session
$id = $PHPSESSID;                    // on définit l'id dans une variable standard
session_register("id");            // On enregistre $id dans une variable session
?>


On peut vérifier si la variable "id" est enregistrée, pour cela, il suffit d'utiliser session_registered() :
<?
session_start();
if(session_registered("id")) {
      echo "Variable \$id sauvegardée !";
  } else {
      echo "Variable \$id non sauvegardée !";
  }
 ?>


Voici comment mettre fin à une session :
Nous pouvons faire plusieurs actions : désenregistrer une ou toutes les variables sessions, ou bien directement détruire la session.

<?
session_unregister("id");                // on supprime la variable session "id"
session_unset();                                // on désactive toutes les variables sessions.
session_destroy();                            // on détruit complètement la session.
?>

Nous avons maintenant tous les éléments pour créer une page protégée...

Script d'authentification que nous appellerons "auth.php", on y aurra accès après avoir rempli le formulaire login et pass . On vérifiera dans le champ "access" de la base sql s'il est égal à "ok". Cette option permettra par exemple de suspendre un compte utilisateur sans le supprimer.

---------------
<?
session_start();                                                                                                        // démarrage de la session
$login = $_POST['login'];
$pass = $_POST['pass'];
if(isset($login) && isset($password))                                                 // on vérifie si on est passé par le formulaire
{
mysql_connect("host", "login", "pass");                                                        // connexion à la base sql
# On vérifie si "access" est égal à "ok" dans la base
$req=mysql_db_query("nom_base", "select access from base where nom = '$login' and pass = '$pass'");  // on regarde à l'endroit des login et pass
$result=mysql_fetch_object($req) or die("Login ou pass incorrect !");            // si le login et le pass ne sont pas trouvés, on arrète le script
$access=$access->access;                                                    // on met l'access dans une variable $access
$id=$nom;
  if($access != "ok")                                                                // On vérifie la valeur de la variable $access
  {
    echo "Compte désactivé !";
        exit();                                                                            // On arrète le script
  }
  else
  {
        session_register("access_ok");                             // si on a passé toutes les étapes, on enregistre la variable session "access_ok"
  }
mysql_close();                                                                // on ferme la connexion mysql
}
if (!session_is_registered("access_ok"))                        // si la variable n'est pas enregistrée...
{
   echo"<center>Session expirée ou invalide !<br>";
   echo"<a href='url_du_formulaire'>reconnexion</a></center>";
   exit();
}
?>

 <html>

/.........../                                                                                        // Accès à la page html protégée par la session

</html>
---------------------

Maintenant que nous avons notre script d'authentification, il suffit d'établir le code de protection qui se trouvera en haut de chaque page qui nécessitera un login et un pass. Il suffira pour cela de vérifier si la variable session que nous avons appelé "access_ok" est enregistrée ou non.

-----------------
<?
session_start();
if (!session_is_registered("access_ok"))                        // si la variable n'est pas enregistrée...
{
   echo"<center>Session expirée ou invalide !<br>";
   echo"<a href='url_du_formulaire'>reconnexion</a></center>";
   exit();
}
?>
<html>
/..../                                                                                         // Page html protégée.
</html>
-------------------
 
Une note importante à signaler, est que lorsque l'on navigue dans des pages via des liens hypertextes utilisant les sessions, il est nécessaire de mettre le nom de session et l'id dans cette url afin de garder en mémoire l'id session actif pour ne pas avoir besoin de se réidentifier à chaque page protégée.

Exemple :
http://site.com/membre.php?<? echo $session_name; ?>=<? echo $PHP_SESSID; ?>
ce qui donnera lors de l'éxécution :
 
http://site.com/membre.php?PHP_SESSID=7d5d7h4fvn2bnhj45fg9dgz
"7d5d7h4fvn2bnhj45fg9dgz" correspondant à l'id session.


En conclusion, les sessions php4 sont légères, éfficaces et sécurisées par rapport aux sessions php3
Cet article est bien entendu une simple présentation des sessions php4 par un exemple, car elle offrent beaucoup plus de possibilités, on peut par exemple les utiliser en situant les visiteurs n'importe où sur le site, il suffit pour cela d'enregistrer dans une variable session le nom de la page courant. On peut très bien les utilser pour établir des stats détaillées d'un site web en pistant les visiteurs sur le site.
On pourra également ajouter une sécurité sur ce script afin d'éviter les vols de sessions, en effet si on vous prends votre id session en exploitant une petite faille XSS, on pourra utilser votre compte si votre session est encore active : pensez à vous déconnecter de la session ! Pour éviter le vol de session, on enregistrera dans une variable session l'ip utilisée lors de l'authentification et on vérifiera ensuite l'ip contenue dans la variable avec l'ip actuelle sur chaque page. ($REMOTE_ADDR pour afficher l'ip)


J'espère que cela vous sera utile, soit pour mieux comprendre les techniques de sécurité, soit pour établir votre compte membre sur votre site web...

 

Shad0w -:- webmaster

Welcome To SecurityHack.net Articles catalogue

securityhack.net v 4_2
 
Les Sous-domaines
  Projet JackShell
+ Challenge BigContest +
JackTrojan
Forums
Chat IRC
 
Chat Box
 
Up Down
Pseudo :
Message :

 
Box News !
 
 

02 visiteur(s) online
© 2003, 2004 www.SecurityHack.net | Admin : Shad0w ; Webmasters : P41f0x, Dark-Jedi