 |
| | |  |  |  |  |  | L'Authentification en PHP
|  |  |  |  |  |  |
Si vous souhaitez protéger par mot de passe, et login, l'accès à certaine partie de votre site, c'est très simple, il suffit de
savoir le faire. On me demande souvent "comment je fais pour restreindre l'accès ?", en fait, la vraie question, et c'est comme
ça qu'il faut opérer comme pour tout, c'est "comment je fais pour autoriser certaines personnes à accéder à cette partie du site".
Il existe principalement 2 types d'authentification (mis à part les certificats clients pour lesquels le problème est différent,
et je n'ai pas les moyens de le tester pour l'instant !!!) :
fichier ".htaccess" et ".htpasswd"
utilisation d'une base de données
Mais ceci ne sert qu'à autoriser l'accès à une page. Il peut être pratique ensuite de garder l'authentification en mémoire si
l'on souhaite l'utiliser plus tard. Par conséquent, les systèmes de login/password sont souvent utilisés conjointement aux cookies.
Si vous souhaitez des infos sur les cookies, vous pouvez aller sur ma page sur les cookies en PHP.
Je vais donc traiter ici les 2 sujets le plus simplement et succinctement possible, en précisant dans un premier temps les différences
entre les 2 types d'authentification.
| | | | | | | | | 2. Différences entre les types d'authentification
|  |  |  |
|
Ca, c'est de la transition... J'aurais du être animateur télé !!!
En fait, voici les différences majeures entre les 2 systèmes :
| .htaccess |
Base de données |
| Géré par le serveur HTTP
Encryption automatique faite par le navigateur
Présentation en boite de dialogue
Peut s'utiliser avec de nombreux serveurs (si l'hébergeur l'autorise, bien sur)
S'applique en général à tout un répertoire
Reconnu comme étant assez sécurisé |
Géré par le moteur PHP du serveur
Pas forcément crypté
Présentation au sein d'une page HTML, donc personnalisable
Connexion à une base de données
Rarement sécurisé (dépend du développeur)
Doit être géré pour chaque fichier
Mot de passe facilement gérable par l'utilisateur |
| | | | | | | | | 3. Exemple avec un fichier .htaccess
|  |  |  |
|
Déjà, il faut créer le fichier .htaccess et le fichier .htpasswd. Pour ce faire, en cas de soucis, vous pouvez aller
ici : info sur .htpasswd et .htaccess.
Vous avez donc vos fichiers correctement paramétrés, et qui protègent tout un répertoire. Dans ce répertoire, mettez un fichier
"index.php" qui sera celui que vous utiliserez pour vos tests (évidemment, si vous préférez autre chose, n'hésitez pas, mais
c'est le nom que je vais utiliser dans toute la page !).
Voici un exemple de code pour récupérer le login utilisé par l'utilisateur :
<html>
<head>
<title>Authentification .htaccess</title>
</head>
<body>
L'utilisateur authentifié est :<br>
<?php
$User = getenv("Remote_User");
echo "<b>$User</b><br>\n";
?>
</body>
</html>
Ce code affiche donc le nom de l'utilisateur enregistré sur le site. Il vous suffit donc de créer les cookies associés si
vous souhaitez garder les infos enregistrées pour d'autres pages.
En ajoutant un cookie, voici ce que vous obtiendriez :
<?php
$User = getenv("Remote_User");
setCookie("UserName",$User);
?>
<html>
<head>
<title>Authentification .htaccess</title>
</head>
<body>
L'utilisateur authentifié est :<br>
<?php
echo "<b>$User</b><br>\n";
?>
</body>
</html>
Pour rappel, les cookies ne peuvent être fixés qu'en en-tête du fichier et plus après... D'où le traitement avant l'affichage
de "<html>".
| | | | | | | | | 4. Exemple avec base de données
|  |  |  |
|
Dans ce cas, il faut déjà avoir les informations de connexions à la base (serveur, login, mot de passe, nom de la base).
Il faut d'abord créer une page qui demande le login et le mot de passe de l'utilisateur. Voici un exemple pour ce genre de
page :
<html>
<head>
<title>Authentification Base de Données</title>
</head>
<body>
<form action="login.php" method="post">
<font color="white"><b>Login :</b><input size="20" value="" name="un"><br>
<b>Mot de passe :</b><input type="password" size="20" value="" name="pw"><br>
<input type="submit" value="Entrer">
</body>
</html>
Ensuite, voici le code de la page "login.php" correspondant, en supposant que la table dans laquelle est enregistrée le
mot de passe et le login de l'utilisateur est "Utilisateur" :
<html>
<head>
<title>Authentification Base de Données</title>
</head>
<body>
<?php
$hostname = "monmysql.fournisseur.fr"; // nom du serveur ou se trouve votre base
$username = "login";
$password = "password";
$database = "mabase";
$link = mysql_connect($hostname,$username,$password);
$mysqlsdb = mysql_select_db($database,$link);
$stmt = "Select * from Utilisateur where login='".$un."'";
$result = mysql_query($stmt,$link);
if (mysql_num_rows($result) == 0) {
echo "Login incorrect";
}
else {
$row = mysql_fetch_object($result);
$dbpasswd = $row->PassWord;
if ($dbpasswd == $pw) {
echo "Login et mot de passe OK";
}
else {
echo "Mot de passe incorrect";
}
}
?>
</body>
</html>
Ce code n'est évidemment pas parfait, mais il fonctionne. Il ne vous reste plus qu'à l'appliquer à votre cas perso, et le faire
évoluer pour vous en améliorant la sécurité (cryptage des mots de passe par exemple), ajout de cookie, et autres détails de ce style.
|