Example #1
0
 public static function execute()
 {
   if(!isset($_COOKIE[SESSION_NOM]))
   {
     // 1. Aucune session transmise
     Session::open_new();
     Session::init();
     if(!Session::$tab_droits_page['public'])
     {
       // 1.1. Demande d'accès à une page réservée (donc besoin d'identification) : session perdue / expirée, ou demande d'accès direct (lien profond) -> redirection pour une nouvelle identification
       $_SESSION['MEMO_GET'] = $_GET ; // On mémorise $_GET pour un lien profond hors SSO, mais pas d'initialisation de session sinon la redirection avec le SSO tourne en boucle.
       Session::exit_sauf_SSO('Session absente / perdue / expirée / incompatible.'); // Si SSO au prochain coup on ne passera plus par là.
     }
     else
     {
       // 1.2 Accès à une page publique : RAS
     }
   }
   else
   {
     // 2. id de session transmis
     Session::open_old();
     if(!isset($_SESSION['USER_PROFIL_SIGLE']))
     {
       // 2.1. Pas de session retrouvée (sinon cette variable serait renseignée)
       if(!Session::$tab_droits_page['public'])
       {
         // 2.1.1. Session perdue ou expirée et demande d'accès à une page réservée : redirection pour une nouvelle identification
         Session::close__open_new__init( TRUE /*memo_GET*/ );
         Session::exit_sauf_SSO('Session absente / perdue / expirée / incompatible.'); // On peut initialiser la session avant car si SSO au prochain coup on ne passera plus par là.
       }
       else
       {
         // 2.1.2. Session perdue ou expirée et page publique : création d'une nouvelle session, pas de message d'alerte pour indiquer que la session est perdue
         Session::close__open_new__init( TRUE /*memo_GET*/ );
       }
     }
     elseif($_SESSION['USER_PROFIL_SIGLE'] == 'OUT')
     {
       // 2.2. Session retrouvée, utilisateur non identifié
       if(!Session::$tab_droits_page['public'])
       {
         // 2.2.1. Espace non identifié => Espace identifié : redirection pour identification
         $_SESSION['MEMO_GET'] = $_GET ; // On mémorise $_GET pour un lien profond hors SSO, mais pas d'initialisation de session sinon la redirection avec le SSO tourne en boucle.
         Session::exit_sauf_SSO('Authentification manquante ou perdue (onglets incompatibles ouverts ?).');
       }
       else
       {
         // 2.2.2. Espace non identifié => Espace non identifié : RAS
       }
     }
     // On ne teste un vol de session que pour les utilisateurs identifiés car un établissement peut paramétrer d'éviter cette vérification
     elseif( $tab_info_pb = Session::TestAnomalieSession() )
     {
       // 2.3. Session retrouvée, mais pb détecté (IP changée, navigateur différent)
       list( $msg_pb , $avant , $apres ) = $tab_info_pb;
       // Enregistrement du détail
       $fichier_nom = 'session_anomalie_'.$_SESSION['BASE'].'_'.$_SESSION['SESSION_ID'].'.txt';
       $fichier_contenu = 'Appel anormal : '.$msg_pb.'.'."\r\n\r\n".'Avant : '.$avant."\r\n".'Après : '.$apres."\r\n";
       FileSystem::ecrire_fichier( CHEMIN_DOSSIER_EXPORT.$fichier_nom , $fichier_contenu );
       // Game over
       Session::close__open_new__init( TRUE /*memo_GET*/ );
       Session::exit_sauf_SSO('Appel anormal : '.$msg_pb.' (<a href="'.URL_DIR_EXPORT.$fichier_nom.'" target="_blank">détail</a>).');
     }
     else
     {
       // 2.4. Session retrouvée, utilisateur identifié
       if(Session::$tab_droits_page[$_SESSION['USER_PROFIL_TYPE']])
       {
         // 2.4.1. Espace identifié => Espace identifié identique : RAS
       }
       elseif(Session::$tab_droits_page['public'])
       {
         // 2.4.2. Espace identifié => Espace non identifié : création d'une nouvelle session vierge, pas de message d'alerte pour indiquer que la session est perdue
         // A un moment il fallait tester que ce n'était pas un appel ajax, pour éviter une déconnexion si appel au calendrier qui était dans l'espace public, mais ce n'est plus le cas...
         // Par contre il faut conserver la session de SimpleSAMLphp pour laisser à l'utilisateur le choix de se déconnecter ou non de son SSO.
         $SimpleSAMLphp_SESSION = ( ($_SESSION['CONNEXION_MODE']=='gepi') && (isset($_SESSION['SimpleSAMLphp_SESSION'])) ) ? $_SESSION['SimpleSAMLphp_SESSION'] : FALSE ; // isset() pour le cas où l'admin vient de cocher le mode Gepi mais c'est connecté sans juste avant
         Session::close__open_new__init( FALSE /*memo_GET*/ );
         if($SimpleSAMLphp_SESSION) { $_SESSION['SimpleSAMLphp_SESSION'] = $SimpleSAMLphp_SESSION; }
       }
       elseif(!Session::$tab_droits_page['public']) // (forcément)
       {
         // 2.4.3. Espace identifié => Autre espace identifié incompatible : redirection pour une nouvelle identification
         // Pas de redirection SSO sinon on tourne en boucle (il faudrait faire une déconnexion SSO préalable).
         Session::close__open_new__init( FALSE /*memo_GET*/ ); // FALSE car sinon on peut tourner en boucle (toujours redirigé vers une page qui ne correspond pas au profil utilisé)
         Session::exit_sauf_SSO('Appel incompatible avec votre identification actuelle.');
       }
     }
   }
 }
Example #2
0
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'basculer' && $user_id) {
    // Par sécurité et pour actualiser une éventuelle liaison (dé)faite depuis un autre compte, on ne stocke en session que l'identifiant de la clef des associations
    // La méthode appelée ci-dessous effectue de multiples vérifications complémentaires
    list($_SESSION['USER_SWITCH_ID'], $user_liste) = DB_STRUCTURE_SWITCH::DB_recuperer_et_verifier_listing_comptes_associes($_SESSION['USER_ID'], $_SESSION['USER_SWITCH_ID']);
    if (!$_SESSION['USER_SWITCH_ID']) {
        exit_json(FALSE, 'Aucune liaison de compte vous concernant n\'a été trouvée !');
    }
    $tab_user = explode(',', $user_liste);
    if (!in_array($user_id, $tab_user)) {
        exit_json(FALSE, 'Le compte indiqué n\'est pas relié au votre !');
    }
    // C'est ok
    $auth_DB_ROW = DB_STRUCTURE_PUBLIC::DB_recuperer_donnees_utilisateur('switch', $user_id);
    $BASE = $_SESSION['BASE'];
    Session::close__open_new__init(FALSE);
    SessionUser::initialiser_utilisateur($BASE, $auth_DB_ROW);
    exit_json(TRUE);
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Ajouter une liaison
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'ajouter' && $login != '' && $password != '') {
    // initialisation
    $auth_resultat = 'Erreur avec les données transmises !';
    // Protection contre les attaques par force brute (laissé même pour cette page requiérant une authentification car la réponse en cas d'erreur de mdp y fait référence)
    if (!isset($_SESSION['FORCEBRUTE'][$PAGE])) {
        exit_json(FALSE, 'Session perdue ou absence de cookie : merci d\'actualiser la page.');
    } else {
        if ($_SERVER['REQUEST_TIME'] - $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] < $_SESSION['FORCEBRUTE'][$PAGE]['DELAI']) {
            $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] = $_SERVER['REQUEST_TIME'];
Example #3
0
  // Par sécurité et pour actualiser une éventuelle liaison (dé)faite depuis un autre compte, on ne stocke en session que l'identifiant de la clef des associations
  // La méthode appelée ci-dessous effectue de multiples vérifications complémentaires
  list( $_SESSION['USER_SWITCH_ID'] , $user_liste ) = DB_STRUCTURE_SWITCH::DB_recuperer_et_verifier_listing_comptes_associes( $_SESSION['USER_ID'] , $_SESSION['USER_SWITCH_ID'] );
  if(!$_SESSION['USER_SWITCH_ID'])
  {
      exit_json( FALSE , 'Aucune liaison de compte vous concernant n\'a été trouvée !' );
  }
  $tab_user = explode(',',$user_liste);
  if( !in_array( $user_id , $tab_user ) )
  {
    exit_json( FALSE , 'Le compte indiqué n\'est pas relié au votre !' );
  }
  // C'est ok
  $auth_DB_ROW = DB_STRUCTURE_PUBLIC::DB_recuperer_donnees_utilisateur( 'switch'  ,$user_id );
  $BASE = $_SESSION['BASE'];
  Session::close__open_new__init( FALSE /*memo_GET*/ );
  SessionUser::initialiser_utilisateur($BASE,$auth_DB_ROW);
  exit_json( TRUE );
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Ajouter une liaison
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( ($action=='ajouter') && ($login!='') && ($password!='') )
{
  // initialisation
  $auth_resultat = 'Erreur avec les données transmises !';
  // Protection contre les attaques par force brute (laissé même pour cette page requiérant une authentification car la réponse en cas d'erreur de mdp y fait référence)
  if(!isset($_SESSION['FORCEBRUTE'][$PAGE]))
  {