DOCUMENTATION SUR LE GESTIONNAIRE DE LOGON : ClasseLogon.php

AUTEUR : FRANCK OBERLECHNER, Ingénieur Système et Réseaux


 

SOMMAIRE

1. Préambule

2. Installation de la classe

3. Déclaration de la page de LOGON

4. Analyse des codes de retour et branchement

5. et si la sécurité en encore insuffisante

6. gestion des thèmes de couleur

7. le LOGOUT et le changement de mot de passe

A. LES EXEMPLES

 

 


1) PREAMBULE

La classe ClasseLogon.php permet de gérer facilement en une seule page toute la phase de connexion d'un utilisateur, d'envoi de mot de passe si oubli, de changement de mot de passe.

Il est a noté qu'aucun champ sensible ne transite en clair ni dans un sens ni dans l'autre. La clef de cryptage et les noms de champs changent dynamiquement à chaque appel à la page.

On peut durcir la sécurité en appelant la page dans une session SSL (HTTPS), mais les serveurs des fournisseurs d'accès proposent rarement cette option.

Les cookies de mémorisation de l'identifiant sont cryptés sur le même procédé mais avec une clef fixe.



2) INSTALLATION

Définir un répertoire "include_path" en modifiant le fichier de configuration de PHP %SYSTEMROOT%\PHP.INI sous IIS

;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;

; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
include_path = "d:/wwwroot/rubappli/communs"

Décompresser dans le répertoire "include_path" du serveur PHP le fichier classeLogon.php et le répertoire classeLogon (ce répertoire contient la documentation et les exemples)
On obtient l'arborescence :

    .../Répertoire_Include

    _classePath.php
    classeLogon.php
    classeLogon<dir>

    Editer le fichier _classePath.php et modifier la ligne DEFINE en terminant par un "/" obligatoirement, la constante INCLUDEPATH doit pointer sur le répertoire ou se situe le fichier classeForms.php et _classePath.php

 

    // PARAMETRAGE :
    DEFINE('INCLUDEPATH','/rubappli/communs/');

ATTENTION pour que toutes les pages de votre site fonctionnent définir de préférence un chemin absolu ( commencant par un / et donnant le chemin complet depuis la racine du site )

C'est tout ! la classe est maintenant exploitable directement

 

EN OPTION : DEFINITION D'UN THEME DE COULEUR IMPLICITE POUR TOUT LE SITE

Créer un fichier _classeSkin.php dans le répertoire des inclusions

<?php

// 0: Rouge, 1:Bleu, 2:Gris, 4:Vert, 5:Orange
DEFINE('DEFAULT_SKIN', 5);

?>

ce fichier est utilisé par les autres classes classeTableau, classeGrid tous les objets gérés par ces classes bénéficient du même thème de couleurs.

ATTENTION : L'INSTALLATION COMPLETE EST NECESSAIRE POUR TESTER LES EXEMPLES QUI SUIVENT

 

 


3) DECLARATION D'UN LOGON

Comme pour le gestionnaire de formulaire, la déclaration d'une page ré-entrante permet de gérer tous les cas de figure de la phase de connexion :

Le mécanisme de logon et de pages protégées s'appui sur les sessions. Chacun peut ensuite gérer les variables de sessions qu'il a besoin pour gérer finement :

Syntaxe :

On codera 2 sections distinctes :

Détail des paramètres:

ECRAN POUR SE CONNECTER

avec l'option "checkbox" activée

ECRAN POUR CHANGER DE MOT DE PASSE

Paramètres spécifiques à la gestion internationale:

Listes des langues utilisées :

dk: 'Dansk',
de: 'Deutsch',
en: 'English',
fr: 'Français',
it: 'Italiano',
nl: 'Nederlands',
no: 'Norsk',
pt: 'Portugês',
sp: 'Español',
fi: 'Suomi',
se: 'Svenska'

pour ajouter d'autres langues : modifier le fichier classeLogon-lang.js, en prenant le code ISO international puis en copiant une langue et en traduisant tous les messages.
Ne pas oublier de copier dans img un gif 16*16 du drapeau.

Tous les drapeaux du monde sont disponibles dans l'archive Flags_of_the_World.rar qui contient une librairie d'icone, extraire le bon drapeau avec un logiciel du genre AXIALIS IconWorkshop


4) ANALYSE DES CODES RETOUR ET BRANCHEMENT

Comme pour le gestionnaire de formulaire, la déclaration d'une page ré-entrante

 

Analyse du code retour par la fonction logon_test()

 

$L->logon_new( array( ... ) );
$stat = $L->logon_test();
switch ($stat) {
case 'V':

// C'EST ICI QUE L'ON COMPARE LA VALEUR DE CHAMPS
// SAISIS AVEC CEUX DE LA BASE, LE TEST REALISE
// ICI EST LA SIMILITUDE AVEC LA PAIRE TOTO / TATA

if (strtoupper($L->logon_get_username())=="TOTO" && strtoupper($L->logon_get_password())=="TATA") {
$_SESSION['SAMPLE_CONNECTE'] = true;
$L->logon_logon();
exit;
}
break;

case 'F':

// C'EST ICI QUE L'ON VERIFIE QUE L'ADRESSE EMAIL
// CORRESPOND A UN COMPTE PRECIS
// SINON ON ENVOIE LE MESSAGE SPECIFIQUE

if (strtoupper($L->logon_get_username())=="TOTO") {
$L->logon_message_password_send(true);
} else {
$L->logon_message_password_send(false,'Message spécifique, aucun utilisateur ne possède cette adresse');
}
break;

case 'C':

// ---------------------------------------
// ENREGISTRER ICI LE NOUVEAU MOT DE PASSE
// LE CONTROLE SUR LA TAILLE MINIMUM A
// DEJA ETE FAIT EN JAVASCRIPT (COTE CLIENT)
// C'EST ICI QUE L'ON PEUT VERIFIER SI LE
// MOT DE PASSE N'EST PAS TOUT ALPHA OU
// TOUT NUMERIQUE
// ---------------------------------------
$L->logon_message_password_changed(true);
break;

default:
}

?>

DETAIL DES METHODES DISPONIBLES :

 

LA GESTION DE LA CASE OU NON ?

classeLogon ne gère pas elle même cette option c'est au moment du l'analyse des valeurs en retour que l'on programmera la prise en compte ou non :

les méthodes : $L->logon_get_username() et $L->logon_get_password() retournent strictement ce qui a été saisi. si on ne veut pas gérer la différence MAJUSCULES/Minuscules sur l'identifiant il suffira de comparer comme suit :

strtoupper($L->logon_get_username()) == strtoupper($valeur_lue_base)

pareil pour les mot de passe


5) ET SI LA SECURITE EST ENCORE INSUFFISANTE...

Il reste encore la possibilité de crypter le mot de passe dans la table des utilisateurs.

La méthode la plus simple est la fonction MD5('chaine_a_crypter') qui hache le mot de passe.

Il faut donc mémoriser dans la base cette chaine transformée et la comparer ultérieurement à MD5($L->logon_get_password())


6) LA GESTION DU THEME DE COULEUR

Comme pour toutes les classes de la gamme "classePHP" la gestion des couleurs est hiérarchisée comme suit par ordre de priorité décroissante :

  1. l'ordre logon_skin() explicite placé entre logon_new() et logon_output_body();
  2. la variable de session : $_SESSION['DEFAULT_SKIN']
  3. la constante 'DEFAULT_SKIN'
  4. la valeur par défaut de la classe


7) LES ORDRES SUPPLEMENTAIRES

On notera la page de logon : page_logon.php


7.1 Le LOGOUT

Pour effectuer un LOGOUT appeler la page qui gère les connexions avec l'option page_logon.php?LOGOUT le branchement à urlno est fait automatiquement.

Dans la page branchée, Il ne faut pas oublier d'effacer toutes les variables de session qui n'ont plus de raison d'être par la fonction unset()

7.2) Le changement de mot de passe

Pour effectuer un changement de mot de passe utiliser l'option page_logon.php?CHANGE
ATTENTION c'est une grave faille de sécurité si vous ne positionnez pas le paramètre "change" à la valeur de $_SESSION['JE_SUIS_CONNECTE'] qui doit être un booléen


7.3) Effacer toutes traces locales ou simplement annuler le mode connexion automatique

Pour effacer les cookies de mémorisation locale de l'identifiant et du mot de passe utiliser page_logon.php?INIT

2 modes donc :

7.4) Forcer le nom de l'utilisateur et la saisie du mot de passe même si une connexion automatique a été définie et est valide

Appeler la page avec un nom d'utilisateur "TITI" pré-rempli en donnant l' argument page_logon.php?USER=TITI

 


A) LES EXEMPLES

sample_01.php Connexion simple
sample_02.php Connexion toutes options
sample_03.php timeout et mode de mémorisation par défaut
sample_04.php version internationale