[Look Inside]
-Sommaire
- Les Paramètres
- Redirection
- Les Images
- protection par mot de passe
-Les cookies
-Base de Données
-FAQ
Programmes CGI avec Delphi et Kylix - La protection par mot de passe
Ce que l'on sait déjà
Lorsque le programme CGI renseigne l'entête CGI, le serveur la complète avec divers informations;
notamment il indique que la requête c'est bien déroulée :
HTTP/1.0 200 OK
Ce qu'il faut savoir
Si vous utiliser mon "browser web text" (voir page delphi), vous verrez
que l'entête HTTP d'un site sécurisé est un peu particulière :
HTTP/1.0 401 Unauthorized
Content-type: text/html
WWW-Authenticate: Basic realm="/MyRealm"
<html><head><title>401 Unauthorized</title></head><body>
<h1>You need a password to access this page !</h1>
</body></html>
ici le serveur renvoie l'erreur 401 Unauthorized, dès lors votre browser sait qu'il
se trouve sur un site protégé. Sans afficher d'erreur il va vous demander le mot de passe
pour le domaine précisé (realm="/MyRealm"). Si vous saisissez un profile/mot de passe valide
pour le serveur, celui-ci vous donnera accès à la page désirée, sinon le browser affiche
le message qui suit l'entête 401.
vous n'avez pas tout compris, bon, relisez tranquillement toute l'info y est !
L'entête HTTP
Si vous avez compris ce qui précède, vous êtes déjà en train de saisir le programme suivant :
Program EssaiPWD;
{$apptype console}
begin
WriteLn('HTTP/1.0 401 Unauthorized');
WriteLn('Content-type: text/html');
WriteLn('WWW-Authenticate: Basic realm="/Essai"');
WriteLn;
WriteLn('mot de passe s.v.p.');
end;
|
...et vous ralez déjà contre votre serveur (ou contre moi), car ça marche pas !
Pas de panique ! C'est normal, je vous avais déjà dit que le serveur complétait l'entête HTTP...
et bien, le CGI ci-dessus arrive sur le browser de cette façon :
HTTP/1.0 200 OK
HTTP/1.0 401 Unauthorized
Content-type: text/html
WWW-Authenticate: Basic realm="/Essai"
mot de passe s.v.p.
La première ligne indique donc que la requête se passe bien (merci le serveur), la seconde
est ignorée. J'ai pas mal galèré pour trouver comment éviter ça, finalement la réponse est
tout simplement dans la norme CGI : le nom du CGI doit commencer par "nph-" s'il gère
lui même l'entête HTTP.
Et voilà, tout est dit, il suffit de renommer le programme ci-dessus en "NPH-ESSAIPWD.EXE"
et ça marche !
Enfin, ça marche presque puisque le mot de passe n'est pas validé !
WWW-Authenticate
Alors, le browser reçoit une demande d'authentification : WWW-Authenticate: Basic realm="/MyRealm"
En réponse, le CGI reçoit le profile/mot de passe dans la variable d'environnement HTTP_AUTHORIZATION
HTTP_AUTHORIZATION=Basic dXNlcjpwYXNzd29yZA==
Pour valider cette information, il faut la décoder...elle est en effet au format Base64.
Petit rappel sur les bases (cours de mathématique de primaire ! ):
- Habituellement on travaille en base 10 : 0..9
- En informatique on utilise couramment la base 16 : 0..9,'A'..F'
- Sur internet on utilise la base 64 : 'A'..'Z','a'..z','+','/'
Vous trouverez dans le programme exemple une unité Base64 qui prend en charge de codage/décodage
d'un type String en base 64.
le texte ci-dessus une fois décodé donne tout simplement : "user:password"
Il ne reste plus au CGI qu'a accepter le mot de passe en envoyant les informations demandées ou
renvoyer l'erreur 401.
Une autre alternative sur un mot de passe invalide étant de
rediriger sur la page d'acceuil par exemple.
Pour la mise en pratique, téléchargez le programme login (sans oublier de
renommer l'executable et le point ini en nph-login.exe et npg-login.ini)
c'est tout !
A +