Intégration d'une protection .htaccess à une authentification sécurisée par sessions php-mysql

Intégration d'une protection .htaccess à une authentification sécurisée par sessions php-mysql

Description

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

Mettre en place le système d'authentification par sessions PHP

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é :

  • d'une base de donnée MYSQL d'utilisateurs;
  • d'une page index.php qui va gérer l'authentification des utilisateurs;
  • d'une page accueil.php qui donne accès aux fonctionnalité de votre site aux utilisateurs dûment identifiés par index.php;
  • d'une page admin.php qui est une interface permettant a l'administrateur d'ajouter ou de supprimer de nouveaux utilisateurs;
  • d'un fichier connexion.php qui donne les paramètres de connexion à la base de donnée des utilisateurs.

Restriction d'accès d'un dossier par .htaccess

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...

Mettre en place un système de téléchargement par PHP des fichiers contenu dans le dossier restreint par .htaccess

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;
    }
}
?>

Permettre aux utilisateurs authentifiés par une session PHP de télécharger un fichier protégé par .htaccess

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>

Conclusion

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.

Ce document intitulé « Intégration d'une protection .htaccess à une authentification sécurisée par sessions php-mysql » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous