| La
gestion de mots de passe |
De Eric Roumégou.
Comment gérer une popup pour inviter un mot de passe ?
Je vous renvoie à la LST 57 où il y a des exemples de gestion de popUp. Hélas, on se trouve toujours avec exclusivement des traitements en code navigateur côté popUp; ce qui est quand mème hyper limité. Donc voici ma solution.
![]() |
Soit la fenêtre suivante nommée SECURITE. Elle est destinée à saisir un mot de passe, contrôler que le mot de passe est bon et enchainer les traitements à suivre. Il y a un champs caché hiddenPw de type texte et un champ caché Flag de type numérique. La serrure est un bouton de type submit. Le champs mot de passe Yourpwd est un champs texte avec la coche mot de passe. Un lien Annuler complête le tout.
|
| Déclarations globales de SECURITE
(serveur) |
On reçoit donc en paramètres le n° de sécurité
(pId) ou son code alpha (pRefext). On va donc lire la table AUTHENTIF selon
l'une ou l'autre de ces clés.
La fonction Rtv_Colonne permet de lire et retourner la valeur induite par la
requête SQL. Le mot de passe est doublement crypté.
Chargement (onload) de SECURITE (navigateur) SI Flag=2 ALORS //on peut fermer le popup |
Important : C'est ce qui va permettre d'inverser la préséance du code navigateur sur le code serveur. Au lieu d'avoir ce code dans le traitement navigateur du bouton, on le met en Onload en jouant sur le champs caché Flag.
ExecuteBouton est une procédure navigateur de la page appellante.
Clic de serrure (serveur) hiddenPw=Crypte(YourPwd,Crypte(PagePrécédente(), NetAdresseIP())) |
Pas de traitement en code navigateur car on a besoin d'effectuer ce traitement
en code serveur (pour le cryptage).
Remarque : sans le cryptage, il aurait été possible
de passer ces tests en code navigateur et fermer directement la pop up (sans
passer par le onload et la gestion du flag).
Mais c'est précisément ce que je reproche à l'exemple de
la LST 57, on n'a que des traitements en code Navigateur et on élude
le problème des contrôles en code serveur. Car bien souvent vous
aurez besoin de lire une table ou un fichier et donc de passer par un traitement
serveur pour valider la donnée saisie. Par exemple dans ce cas, si on
utilise pas le cryptage, n'importe qui ouvrant le source de la page accède
au contenu du mot de passe.
Dernière chose, le lien Annuler comprend un NavigateurFerme() dans le code Navigateur afin de permettre à l'internaute de sortir proprement s'il ne connaît pas le mot de passe.
La fenêtre Appelante.
Il faut :
- une variable globale à l'écran
gsSECURITY est un entier
un bouton BtnSECURITY caché qui déclenchera les opérations
de retour de votre fenêtre popUp.
Clic de BtnSECURITY (serveur) SELON gsSECURITY gsSECURITY=0 |
Le lien "sécurisé" ou le bouton devra contenir ces codes
Clic (onclick) de lien3 (navigateur) //Ouverture de la Popup : On utilise la procédure navigateur OuvrePopup() |
Principe : on initie gsSECURITY pour tel le petit Poucet retrouver son chemin au retour et savoir d'où l'on vient et on appelle la popup.
| Clic de lien3 (serveur) gsSECURITY=1 PageAffiche(SECURITE,0,"MONCODE","AUT_REFEXT") |
Je demande l'affichage d'une page mot de passe pour le code MONCODE
Et les procedures locales Navigateur
| PROCEDURE ExecuteBouton() //Cette procédure simule le clic sur un bouton. PageValide("","BtnSECURITY") |
cette procédure récupérée de la LST 57
| // Syntaxe : OuvrePopup(<NomPage>,<Position>,<Coordonnée
horizontale>,<Coordonnée verticale> ) // Paramètres : // - _NomPage : URL quand il s'agit d'une page quelconque sur Internet. //Si on veut ouvrir une page du projet, on laisse une chaîne vide. La page sera ouverte ensuite en code serveur avec PageAffiche() // - _Position : Position de la Popup par rapport à la page appelante : // - "CentréeMère" : centrée par rapport à la page appelante // - "CentréeEcran" : Centrée par rapport à l'écran (pas de gestion du double écran) // - "PosPerso" : le coin haut gauche de la fenêtre popup positionné à des coordonnées précisées // - "" : C'est le navigateur qui décide // - autres cas : C'est le navigateur qui décide // - _x : Coordonnée horizontale du coin haut gauche de la fenêtre de la popup (uniquement quand _Position = "PosPerso") // - _y : Coordonnée horizontale du coin haut gauche de la fenêtre de la popup (uniquement quand _Position = "PosPerso") // Valeur de retour : // Chaîne : nom du nouveau navigateur. PROCEDURE OuvrePopup(_NomPage="",_TypePosition="",_x=0,_y=0) //Dimensions de la popup
//Renvoie le nom du nouveau navigateur. |
Voilà beaucoup de galères pour accoucher de cette solution. J'ai notamment peiné pour passer un paramètre à la procédure ExecuteBouton. En effet si celui ci était visible (par un info par ex), il n'était pas accepté par le PageValide. Comme souvent, meme si le code nous paraît logique et valide, cela ne fonctionne pas que l'on reste tributaire de ce que le moteur WebDev a prévu de générer.
Donc mixez cet exemple avec ceux de la LST 57 ... mais pfouuhh c'est fatiguant cette débauche d'énergie pour un truc si simple en WinDev !!!