Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi Eclipse MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUMS DELPHI F.A.Q DELPHI TUTORIELS DELPHI LIVRES COMPOSANTS SOURCES DEFI TELECHARGEZ DELPHI TV

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 ma 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 +
Suite du tutoriel :
Sommaire, Introduction, Les paramètres, Redirection, Les images, protection par mot de passe, Les cookies, Base de données, FAQ





Hit-Parade
Responsables bénévoles de la rubrique Delphi : Bruno Guérangé et Pierre Rodriguez - Contacter par EMail :
Vos questions techniques : forum d'entraide Delphi - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.