15. Authentification
Karrigell prend en charge l'authentification HTTP de base, une façon de protéger l'accès à
certains fichiers en demandant un identifiant d'utilisateur et un mot de passe. Le serveur reçoit
les données fournies et les enregistre dans les variables globales AUTH_USER et
AUTH_PASSWORD . Si l'utilisateur fournit un couple qui est autorisé par le serveur, la page
lui est envoyée ; si ce couple n'est pas reconnu comme valide on lui en redemande un autre ; si
l'utilisateur annule sa demande un message d'erreur lui est envoyé
Avec Karrigell, l'authentification est gérée à travers la fonction Authentication ;
appeler Authentication(fonctionTest[,royaume,
messageErreur]) où fonctionTest est une fonction sans argument
définie par l'utilisateur qui renvoie vrai si le test d'authentification réussit (en fonction des
valeurs de AUTH_USER et de AUTH_PASSWORD ) et faux sinon, royaume est une chaîne contenant le nom du domaine d'authentification (celui qui va apparaître sur la
fenêtre de demande d'identifiant et mot de passe) et messageErreur est la chaîne de
caractères affichée sur le navigateur si l'utilisateur annule sa demande d'authentification.
royaume et messageErreur ont tous les deux des valeurs par défaut
Voici un exemple avec une fonction de test très simple :
<%
def testAuth():
return (AUTH_USER=="proust" and AUTH_PASSWORD=="marcel")
Authentication(testAuth,"Test d'authentification",\
"Désolé, vous n'êtes pas autorisé à accéder à cette page")
%>
Bienvenue, utilisateur autorisé !
Avec une telle fonction de test, si un visiteur trouve un moyen de lire le code source, il
découvrira facilement un couple identifiant/mot de passe valide. Une meilleure solution est
d'utiliser md5 : c'est une fonction qui prend une chaîne de caractères comme argument et qui
retourne un "condensé" de 16 octets. On est sûr que les condensés de deux chaînes différentes seront
différents, et il est impossible de retrouver la chaîne d'origine quand on ne connaît que son
condensé
Une bonne méthode consiste à calculer les condensés md5 de l'identifiant et du mot de passe, et
des les stocker dans un fichier. Le test d'authentification lira ce fichier, calculer les condensés
de AUTH_USER et AUTH_PASSWORD, et retournera vrai si les condensés correspondent
<%
import md5
digests=open("digest.ini","rb").read()
userDigest=digests[:16]
passwordDigest=digests[16:]
def authTest():
return (md5.new(AUTH_USER).digest()==userDigest and \
md5.new(AUTH_PASSWORD).digest()==passwordDigest)
Authentication(authTest,"Test d'authentification",\
"Désolé, vous n'êtes pas autorisé à accéder à cette page")
%>
Bienvenue, utilisateur autorisé !
Voir le script k_password.py , dans le répertoire admin , qui génère un fichier avec les condensés md5 de
l'identifiant et du mot de passe de l'administrateur
|