Il est possible de sécuriser des pages web en utilisant un chiffrement des mots de passe par MD5 et les sessions PHP. Par ailleurs, il est également possible d'utiliser le système d'authentification .htaccess pour restreindre l'accès au contenu de répertoires spécifiques. Chacune de ces deux approches a ses avantages et ses inconvénients. D'où l'intérêt d'intégrer les deux méthodes.
L'objectif de ce tutoriel est de montrer comment utiliser une session PHP pour accéder à des pages se trouvant dans un répertoire protégé par un fichier .htaccess
De nombreux systèmes d'authentification par sessions PHP sont disponibles sur la toile. Utilisons par exemple le système DBProtect. Ce système est composé :
Soit, un dossier (par exemple le dossier /files/ ) contenant des fichiers qui seront rendus disponibles en téléchargement uniquement aux utilisateurs authentifiés par une session PHP. Ce dossier est protégé en y insérant un fichier .htaccess dont le contenu est le suivant :
deny from all |
En conséquence, l'accès à ce dossier sera bloqué pour tout le monde...
Il faut maintenant permettre aux utilisateurs authentifiés par une session PHP de télécharger les fichiers du dossier /files/ dont l'accès est restreint par .htaccess. Cela peut s'envisager à l'aide d'un script PHP (download.php) qui va envoyer le contenu du fichier souhaité vers la sortie standard en utilisant la fonction fpassthru(). Pour ce faire, nous pouvons par exemple utiliser le code proposé sur le site Internet de Sebastian Sulinski :
Soit le script download.php contenant le code suivant :
<?php // block any attempt to the filesystem if (isset($_GET['file']) && basename($_GET['file']) == $_GET['file']) { $filename = $_GET['file']; } else { $filename = NULL; } // define error message $err = '<p style="color:#990000">Sorry, the file you are requesting is unavailable.</p>'; if (!$filename) { echo "une erreur"; // if variable $filename is NULL or false display the message echo $err; } else { // define the path to your download folder plus assign the file name $path = 'files/'.$filename; // check that file exists and is readable if (file_exists($path) && is_readable($path)) { // get the file size and send the http headers $size = filesize($path); header('Content-Type: application/octet-stream'); header('Content-Length: '.$size); header('Content-Disposition: attachment; filename='.$filename); header('Content-Transfer-Encoding: binary'); // open the file in binary read-only mode // display the error messages if the file canZt be opened $file = @ fopen($path, 'rb'); if ($file) { // stream the file and exit the script when complete fpassthru($file); exit; } else { echo $err; } } else { echo $err; } } ?>
Il suffit pour cela d'insérer un lien vers le fichier souhaité dans la page d'accueil de l'utilisateur authentifié accueil.php :
<a href="download.php?file=fichier1.pdf">Télécharger fichier1.pdf</a>
Avec cette système, il est maintenant possible d'ouvrir un session PHP et de s'en servir pour accéder à des pages se trouvant dans un répertoire protégé par un fichier .htaccess.