Tuto htaccess

Transcription

Tuto htaccess
HTACCES
Il est souvent intéressant de pouvoir réserver l'accès à un répertoire uniquement aux personnes
munies d'un Login/Password, ceci est facilement réalisable avec la méthode de protection
HTaccess qui est sans doute la meilleure d'entre elles, nous allons voir ici comment la mettre
en place. Avant de commencer vous devez savoir que free.fr, a modifié cette protection, je
ferai donc un aparté les concernant. Quant à Nexen, là c'est clair, il est impossible d'utiliser
cette méthode (ceci est vraiment dommage).
Une protection HTaccess se compose de deux fichiers nommés : .htaccess et .htpasswd.
Vous aurez noté que ces noms de fichiers commencent par un point, sous windows vous ne
pourrez pas mettre ce point : créez donc les mêmes fichiers mais sans point (vous pourrez les
mettre dans votre Client FTP plus tard côté serveur).
Voici ci dessous ce que doivent contenir les deux fichiers en question :
Le fichier HTACCESS
AuthUserFile
/usr/local/etc/httpd/htdocs/www.lesite.com/lerepertoire/.htpasswd
AuthGroupFile /dev/null
AuthName ByPassword
AuthType Basic
<limit GET>
require valid-user
</Limit>
Ce fichier contient les directives de protection, la seule chose que vous devez modifier
c'est le chemin vers le fichier .htpasswd : c'est le fichier qui contient les login et
password des personnes qui sont autorisées à lire le répertoire que vous voulez protéger,
c'est AuthUserFile qui doit être modifié. La solution de facilité est de tout simplement
demander à votre hébergeur le path, puis de l'inscrire dans le fichier, suivi du nom du
répertoire où vous allez placer .htpasswd.
Php propose également une fonction qui peut vous permettre de connaître ce path, cette
fonction c'est realpath(). Créez un fichier realpath.php et mettez-y ce code : <? echo
realpath("index.php"); ?> puis placez ce fichier sur la racine de votre FTP.
Attention vous devez avoir un fichier qui s'appelle "index.php" sur cette même racine, si
vous n'en avez pas, donnez le nom d'un de vos fichiers qui se trouve sur la racine dans la
syntaxe de <? echo realpath("lefichier.php"); ?>.
Ensuite allez dans votre navigateur et lancez le fichier "realpath.php", vous aurez alors un
résultat de ce style :
/home/user/p/h/p/phpdebutant/www/index.php
Le chemin de votre site est donc : /home/user/p/h/p/phpdebutant/www/, il ne vous
reste plus qu'à y mettre le reste de votre chemin vers le fichier .htpasswd , par exemple :
/home/user/p/h/p/phpdebutant/www/membres/.htpasswd, voilà vous avez votre
AuthUserFile, copiez-le dans .htaccess.
Le fichier HTPASSWD
Francis:Xfv46GgHz
Robert:FrgyHYJUJjj
Renée:FRZScgtHYk
C'est donc dans ce fichier que sont stockés les couples login/password , vous constatez
que les mots de passe sont cryptés, il vous suffit d'utiliser les fonction de cryptage
proposées par php pour obtenir un résultat identique (consultez la documentation
officielle a la fin de ce document).
Une fois crypté, vous ajoutez le login:password sur la ligne du dessous et le tour est
joué !
Une fois que vous avez créé vos deux fichiers, il ne vous reste plus qu'à les copier dans le
répertoire que vous voulez protéger via votre logiciel FTP Client (cuteFTP, FTPexpert, etc).
La dernière chose importante à faire une fois que vous avez placé les fichiers côté serveur,
c'est de les renommer en mettant les points devant : .htaccess et .htpasswd. Maintenant il
vous reste plus qu'à vous rendre dans votre navigateur et d'appeler l'une des pages que vous
avez mis dans le répertoire protégé pour voir apparaître la protection.
Documentation officielle de PHP
Fonction de cryptage de PHP.
string crypt ( string $str [, string $salt ] )
Retourne la chaîne str chiffrée avec l'algorithme standard Unix DES, ou bien un des
algorithmes disponibles sur la machine.
Certains systèmes supportent plus d'un type de hachage. En fait, il arrive que le chiffrement
DES standard soit remplacé par un algorithme de chiffrement MD5. Le choix du type de
hachage est effectué en se basant sur la valeur du salt. À l'installation, PHP détermine les
possibilités de la fonction crypt(), et acceptera des salt pour d'autres types de chiffrements.
Si aucun salt n'est fourni, PHP va en générer deux caractères (DES), à moins que le système
par défaut soit MD5, auquel cas un salt compatible MD5 sera généré. PHP définit une
constante appelée CRYPT_SALT_LENGTH permettant de vous indiquer la longueur du salt
disponible pour le système de hachage utilisé.
crypt(), lorsqu'elle est utilisée avec le chiffrement standard DES, retourne le salt dans les
deux premiers caractères de la chaîne retournée. Elle n'utilise que les 8 premiers caractères de
str, ce qui fait que toutes les chaînes plus longues, qui ont les mêmes premiers 8 octets
retourneront le même résultat (tant que le salt est toujours le même).
Sur les systèmes où crypt() supporte plusieurs types de hachages, les constantes suivantes
sont mises à 0 ou 1, suivant que le type correspondant est disponible :





: chiffrement DES standard à 2 caractères depuis la classe de
caractères "./0-9A-Za-z". L'utilisation de caractères invalides dans le salt fera échouer
la fonction crypt().
CRYPT_EXT_DES : Hachage DES étendu. Le "salt" sera une chaîne de 9 caractères
composé d'un underscore, suivi de 4 octets du compteur d'itération puis 4 octets du
"salt". Ces caractères seront encodés en tant que caractères imprimables, 6 octets par
caractère, et dont le premier caractère au moins sera significatif. Les valeurs de 0 à 63
seront encodés comme "./0-9A-Za-z". L'utilisation de caractères invalides dans le salt
fera échouer la fonction crypt().
CRYPT_MD5 : hachage MD5 à 12 caractères commençant par $1$
CRYPT_BLOWFISH : hachage Blowfish dont le salt est composé comme ceci ; $2a$, un
paramètre à 2 chiffres, $, et 22 base 64 chiffres depuis la classe de caractères "./0-9AZa-z". L'utilisation de caractères en dehors de cette classe dans le salt fera que la
fonction crypt() retournera une chaîne vide (de longueur 0). Le paramètre à 2 chiffres
est le logarithme base-2 du compteur d'itération pour l'algorithme de hachage basé sur
Blowfish sous jacent et doivent être dans l'intervalle 04-31. De la même façon, si vous
utilisez une valeur en dehors de cet intervalle, la fonction crypt() échouera.
CRYPT_SHA256 - Hachage SHA-256 dont le salt est composé de 16 caractères préfixé
par $5$. Si le salt commence par 'rounds=<N>$', la valeur numérique de N sera
utilisée pour indiquer le nombre de fois que la boucle de hachage doit être exécutée,
un peu comme le paramètre dans l'algorithme Blowfish. La valeur par défaut de
CRYPT_STD_DES

rounds est de 5000, le minimum pouvant être de 1000 et le maximum, de 999,999,999.
Tout autre sélection de N en dehors de cet intervalle sera tronqué à la plus proche des
2 limites.
CRYPT_SHA512 - Hachage SHA-512 dont le salt est composé de 16 caractères préfixé
par $6$. Si le salt commence par 'rounds=<N>$', la valeur numérique de N sera
utilisée pour indiquer le nombre de fois que la boucle de hachage doit être exécutée,
un peu comme le paramètre dans l'algorithme Blowfish. La valeur par défaut de
rounds est de 5000, le minimum pouvant être de 1000 et le maximum, de 999,999,999.
Tout autre sélection de N en dehors de cet intervalle sera tronqué à la plus proche des
2 limites.
Note:
Depuis PHP 5.3.0, PHP dispose de sa propre implémentation, et l'utilisera si le système ne
dispose pas de fonction crypt, ou de certains algorithmes.
Liste de paramètres
str
La chaîne à hacher.
salt
Si l'argument salt n'est pas fourni, le comportement est défini par l'implémentation de
l'algorithme et peut provoquer des résultats inattendus.
Valeurs de retour
Retourne la chaîne hachée ou une chaîne qui sera inférieure à 13 caractères et qui est garantie
de différer du salt en cas d'erreur.
Historique
Version
Description
5.3.2
Ajout de SHA-256 et de SHA-512 basés sur l'» implementation de Ulrich Drepper.
Correction du comportement de Blowfish lors d'étape invalide où une chaîne d'échec
5.3.2
("*0" ou "*1") était retournée au lieu de retourner le DES dans ce cas.
PHP dispose maintenant de sa propre implémentation de crypt MD5, Standard DES,
5.3.0
Extended DES et l'algorithme Blowfish. Il l'utilisera si le système ne fournit pas l'un
ou l'autre des algorithmes.
Exemples
Exemple #1 Exemple avec crypt()
<?php
// laissons le salt initialisé par PHP
$password = crypt('mypassword');
/*
Il vaut mieux passer le résultat complet de crypt() comme salt nécessaire
pour le chiffrement du mot de passe, pour éviter les problèmes entre les
algorithmes utilisés (comme nous le disons ci-dessus, le chiffrement
standard DES utilise un salt de 2 caractères, mais un chiffrement
MD5 utilise un salt de 12).
*/
if (crypt($user_input, $password) == $password) {
echo "Mot de passe correct !";
}
?>
Exemple #2 Utilisation de crypt() avec htpasswd
<?php
// Définition du mot de passe
$password = 'mypassword';
// Récupération du hash, on laisse le salt se générer automatiquement
$hash = crypt($password);
?>
Exemple #3 Utilisation de crypt() avec différents types de chiffrement
<?php
if (CRYPT_STD_DES == 1) {
echo 'DES standard : ' . crypt('rasmuslerdorf', 'rl') . "\n";
}
if (CRYPT_EXT_DES == 1) {
echo 'DES étendu : ' . crypt('rasmuslerdorf', '_J9..rasm') . "\n";
}
if (CRYPT_MD5 == 1) {
echo 'MD5 :
}
' . crypt('rasmuslerdorf', '$1$rasmusle$') . "\n";
if (CRYPT_BLOWFISH == 1) {
echo 'Blowfish :
' . crypt('rasmuslerdorf', '$2a$07$usesomesillystr
ingforsalt$') . "\n";
}
if (CRYPT_SHA256 == 1) {
echo 'SHA-256 :
' . crypt('rasmuslerdorf', '$5$rounds=5000$usesome
sillystringforsalt$') . "\n";
}
if (CRYPT_SHA512 == 1) {
echo 'SHA-512 :
' . crypt('rasmuslerdorf', '$6$rounds=5000$usesome
sillystringforsalt$') . "\n";
}
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
DES standard : rl.3StKT.4T8M
DES étendu : _J9..rasmBYk8r9AiWNc
MD5 :
$1$rasmusle$rISCgZzpwk3UhDidwXvin0
Blowfish :
$2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi
SHA-256 :
$5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6
SHA-512 :
$6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY4
7Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
Notes
Note: Il n'existe pas de fonction de déchiffrement, car la fonction crypt() utilise un
algorithme à un seul sens (injection).