La première étape est de créer sur votre disque dur un fichier appelé ".htaccess". Mais là, vous allez certainement avoir un problème (ça commence fort :lol:)
En effet, Windows n'aime pas les fichiers qui commencent par un point. Pour tous les autres systèmes d'exploitation (Mac OS, Linux) vous n'aurez aucun problème. Mais Windows lui il veut pas... sauf si on utilise une petite astuce que je vous montrerai plus loin.
Commencez donc par ouvrir Bloc-Notes :
Là dedans, on va rentrer des informations qui n'ont rien à voir avec du HTML ou du PHP : ce sont des instructions pour le serveur. Elles vont expliquer au serveur que seules certaines personnes sont autorisées à accéder au dossier. Copiez-y ce code :
Code : Apache1
2
3
4 | AuthName "Page d'administration protégée"
AuthType Basic
AuthUserFile "/home/sdz/www/gestion/admin/.htpasswd"
Require valid-user
|
Parmi ces 4 lignes, il y en a 2 que vous allez devoir changer :
- AuthName : c'est le texte qui invitera l'utilisateur à inscrire son login / mot de passe. Vous pouvez personnaliser ce texte comme bon vous semble.
- AuthUserFile : là c'est plus délicat, c'est le chemin absolu vers le fichier .htpasswd (que vous mettrez dans le même répertoire que le .htaccess).
Mais comment je trouve ce chemin absolu moi ?
En effet, c'est la plupart du temps délicat à trouver. Heureusement, il existe une fonction PHP qui va beaucoup nous aider :
realpath.
Cette fonction donne le chemin absolu vers le fichier que vous indiquez. Vous allez donc faire comme ceci pour trouver le chemin absolu :
- Créez un fichier appelé "chemin.php".
- Mettez juste cette ligne de code dedans :
<?php echo realpath('chemin.php'); ?>
- Envoyez ce fichier sur votre serveur avec votre logiciel FTP. Placez-le dans le dossier que vous voulez protéger.
- Ouvrez votre navigateur et allez voir ce fichier PHP. Il vous donne le chemin absolu, par exemple dans mon cas :
/home/sdz/www/gestion/admin/chemin.php
- Copiez ce chemin dans votre .htaccess, et remplacez le "chemin.php" par ".htpasswd", ce qui nous donne au final par exemple :
/home/sdz/www/gestion/admin/.htpasswd
- Supprimez le fichier "chemin.php" de votre serveur, il ne nous sert plus à rien maintenant qu'il nous a donné le chemin absolu

La ligne AuthUserFile indique donc où se trouve le fichier .htpasswd qui contient les mots de passe.
Enregistrez le fichier en mettant le nom entre guillemets, comme ceci :
".htaccess". Cela permet de forcer Windows à enregistrer le fichier, parce qu'avec le point au début en temps normal il ne veut pas ou il fait n'importe quoi
Voilà, on a fini de créer le .htaccess, on peut maintenant passer au .htpasswd
Créez maintenant un nouveau fichier avec Bloc-Notes.
Le .htpasswd contient la liste des personnes autorisées à accéder aux pages du dossier.
On met une personne par ligne, sous cette forme :
login:mot_de_passe_crypté
Au final, votre fichier .htpasswd devrait ressembler à ceci :
Code : Autre1
2
3
4
| mateo21:$1$MEqT//cb$hAVid.qmmSGFW/wDlIfQ81
darkeden:$1$/lgP8dYa$sQNXcCP47KhP1sneRIZoO0
IAN:$1$lT7nqnsg$cVtoPfe0IgrjES7Ushmoy.
Leon:$1$h4oVHp3O$X7Ejpn.uuOhJRkT3qnw3i0 |
Dans cet exemple, il y a 4 personnes autorisées à accéder au dossier : ce sont mateo21, darkeden, IAN, et Leon.
S'il n'y a qu'une personne autorisée à accéder au dossier, vous n'avez qu'à mettre qu'une ligne. Mais si vous êtes plusieurs admins, il est très pratique de pouvoir créer plusieurs "comptes" avec login / mot de passe
Hé ho ?! Comment je les crypte les mots de passe moi ?
Bonne question

Encore une fois, il y a une super fonction PHP qui va nous tirer d'affaire :
crypt. Vous lui donnez un mot de passe et, ne cherchez pas à savoir comment, ça vous le crypte
Par exemple, si mon mot de passe est "kangourou", voici le code PHP que je devrai écrire pour l'obtenir en version cryptée :
<?php echo crypt('kangourou'); ?>
Crypter ses mots de passe est très utile : en effet, si quelqu'un vient un jour à lire votre fichier .htpasswd (quelqu'un qui utilise le même PC que vous par exemple), il ne verra que le mot de passe crypté.
Et là, aucun risque qu'il ne retrouve votre mot de passe : ce cryptage est
indéchiffrable. C'est donc très pratique
Bon, on pourrait en théorie s'arrêter là pour le .htpasswd, mais mon âme de codeur PHP me commande de créer un petit script qui va bien vous être utile. Si vous avez lu le cours PHP jusqu'à la fin de la partie I, vous devriez être capables de comprendre ce script :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 | <p>
<?php
if (isset($_POST['login']) AND isset($_POST['pass']))
{
$login = $_POST['login'];
$pass_crypte = crypt($_POST['pass']); // On crypte le mot de passe
echo 'Ligne à copier dans le .htpasswd :<br />' . $login . ':' . $pass_crypte;
}
else // On n'a pas encore rempli le formulaire
{
?>
</p>
<p>Entrez votre login et votre mot de passe pour le crypter.</p>
<form method="post">
<p>
Login : <input type="text" name="login"><br />
Mot de passe : <input type="text" name="pass"><br /><br />
<input type="submit" value="Crypter !">
</p>
</form>
<?php
}
?>
|
Il y a 2 parties dans ce code, dont la forme est similaire aux TP "Page protégée par mot de passe", "Mini-Chat", etc...
- SI les variables $_POST['login'] et $_POST['pass'] existent, alors c'est qu'on vient de valider le formulaire.
On crypte le mot de passe qu'on a rentré, et on affiche $login:$pass_crypte pour que vous n'ayez plus qu'à copier la ligne dans le .htpasswd 
- SINON, si les variables $_POST['login'] et $_POST['pass'] n'existent pas, donc on affiche le formulaire pour demander d'entrer un login et un mot de passe.
Le formulaire recharge la même page, car il n'y a pas d'attribut action dans la balise <form> comme on l'a vu dans le chapitre sur les formulaires. Lors du rechargement de la page, les variables $_POST['login'] et $_POST['pass'] existeront puisque vous venez d'entrer le login et le mot de passe. Le mot de passe sera alors crypté !
Je vous conseille de créer cette page quelque part sur votre disque dur (ou sur votre serveur peu importe), pour que vous puissiez crypter rapidement vos mots de passe pour le .htpasswd.
Si vous avez la flême de le créer, pas de souci, vous n'avez qu'à venir sur cette page et cliquer sur le bouton "Essayer !"
Si vous êtes hébergés chez Free, vous ne DEVEZ PAS crypter vos mots de passe. En effet, Free demande à ce que les mots de passe ne soient pas cryptés (ce qui est complètement nul pour la sécurité, mais bon...). Vous devrez donc taper le mot de passe directement. Par exemple :
mateo21:superpass
Vous avez maintenant 2 fichiers sur votre disque dur : .htaccess et .htpasswd.
Lancez votre logiciel FTP.
Transférez les fichiers .htaccess et .htpasswd dans le dossier que vous voulez protéger par mot de passe.
Vous devriez voir ceci dans votre logiciel FTP :
Voilà, désormais le dossier est protégé

Si quelqu'un essaie d'accéder à une des pages du dossier (admin_commentaires.php, admin_livreor.php...), alors il obtiendra une fenêtre comme celle-ci lui demandant de se logger :
Si vous rentrez le bon login avec le bon mot de passe, vous serez alors autorisé à accéder aux pages !