Lorsque l'on écrit des scripts, il ne faut pas oublier l'aspect sécurité, entre autre en protégeant les parties administration par mot de passe. Sous Apache, cela peut se faire en utilisant des fichiers .htaccess.

1- Principe

Pour cela nous allons utiliser deux fichiers : un fichier .htaccess pour indiquer au serveur de protéger le répertoire par mot de passe, et un fichier mot de passe (par convention .htpasswd) pour stocker les logins et mots de passe.

2- Fichier .htpasswd

Commençons par créer le fichier dans lequel on va stocker les informations sur les utilisateurs autorisés.

Commande htpasswd

Si vous pouvez accéder au serveur par SSH (ou telnet), il existe une commande permettant d'ajouter automatiquement un utilisateur dans le fichier .htpasswd.

htpasswd -c .htpasswd utilisateur

Ou, si le fichier existe déjà :

htpasswd .htpasswd utilisateur

Vous pouvez utiliser plusieurs types de cryptage des mots de passe, à l'aide des options suivantes :

OptionType de cryptage
-dUtilise la fonction système crypt, basée sur le DES. 8 caractères maximum
-mUtilise l'algorithme de hachage MD5.
-sUtilise l'algorithme de hachage SHA1.

Note : L'option -d (peu recommandée) est utilisée par défaut.

Edition manuelle

Mais vous pouvez également le faire manuellement. Un fichier .htpasswd est structuré tel quel :

utilisateur:mot_de_passe_crypte
autre_utilisateur:autre_mot_de_passe_crypte

Il y a donc un utilisateur par ligne, composée du login suivi du signe "deux points", puis d'un mot de passe crypté. Voir le tableau plus haut pour la liste des modes de cryptage possibles.

Pour crypter le mot de passe vous pouvez utiliser ce script : http://igalaxie.com/utils/crypt.php

Imaginons que l'on veuille autoriser paul et pierre, ayant respectivement pour mot de passe poire et pomme (quelle créativité ;o)).

paul:TGGkwpqcDfY52
pierre:rpViM37EXGz1A

Puis, luc et olivier, beaucoup plus rigoureux, qui choisissent les mots de passe 'Ux/T1Xgm8 et (0a5)qjs+D utilisant respectivement les modes de cryptage md5 et sha1 :

paul:TGGkwpqcDfY52
pierre:rpViM37EXGz1A
luc:$1$X9aQKS1A$gMvl6iycb1WiONnzxPYKb1
olivier:{SHA}a0fd046e5da24826ba36de0bf0ad8cbaa4f2de1a

3- Fichier .htaccess

Le fichier .htaccess permet d'indiquer au serveur web que l'on souhaite protéger notre répertoire par mot de passe. Sa syntaxe à utiliser peut varier en fonction de votre hébergeur.

En général

Dans la plupart des cas, on utilisera la syntaxe suivante :

AuthUserFile /home/www/chemin/.htpasswd
AuthGroupFile /dev/null
AuthName "Acces Restreint"
AuthType Basic

<Limit GET POST>
require valid-user
</Limit>

AuthUserFile donne le chemin du fichier mot de passe, tandis que AuthName définit le message affiché dans la fenêtre d'identification. Le Limit indique que tout le répertoire est protégé.

Il est également possible de protéger uniquement certains fichiers (en ajoutant autant de Files que de fichiers à protéger).

AuthUserFile /home/www/chemin/.htpasswd
AuthGroupFile /dev/null
AuthName "Acces Restreint"
AuthType Basic

<Files admin.php>
require valid-user
</Files>
<Files effacer.php>
require valid-user
</Files>

Sous Cobalt

Sous Cobalt la syntaxe est un peu différente :

order allow,deny
allow from all
require valid-user
AuthUserFile /home/www/chemin/.htpasswd
AuthPAM_Enabled off
AuthName "Acces Restreint"
AuthType Basic

Free / Online

Chez Free / Online la syntaxe diffère également :

PerlSetVar AuthFile secret/passlist
AuthName "Acces Restreint"
AuthType Basic

<Limit GET POST>
require valid-user
</Limit>

Pour en savoir plus sur Online et Free, vous pouvez également consulter le site de Proxad.

4- Conclusion

Et voilà ! Ce n'est pas plus compliqué, et tellement utile.

Sachez qu'il existe des scripts permettant de gérer tout ceci automatiquement. Je vous laisse chercher, en fonction de vos besoins.