Avertissement Internet Explorer
Attention !!!
Internet Explorer n'est pas compatible avec ce site internet.

Vous êtes actuellement sous Internet Explorer, ce navigateur est obsolète ce qui peut vous poser de nombreux problèmes.

Pour éviter ces problèmes veuillez optez pour un navigateur plus récent.

Plus d'informations en cliquant ici

Chargement
Yann-Elias Bellagnech
Développeur Web
Créer simplement un accès sécurisé à des fichiers avec Symfony

Créer simplement un accès sécurisé à des fichiers avec Symfony

Temps de lecture : 3 minutes
Voir plus

Prérequis

Pour bien suivre ce tutoriel, vous devez être à l’aise avec Symfony.

Comment fonctionne l’accès au fichier sur un serveur web ?

De manière générale, un projet web comporte plusieurs dossiers qui correspondent aux différents types de fichier dont a besoin le site internet pour fonctionner. Parmi ces dossiers, l’un d’entre eux est exposé publiquement, dans le cas de Symfony, il s’agit du dossier public.

Dans ce dossier, on retrouvera tous les fichiers accessibles depuis l’extérieur. Parmi ceux-ci, se trouve le fichier index.php qui reçoit les requêtes de l’extérieur et les traites à l’aide du reste du code PHP de l’application. On y trouvera également les fichiers statiques qui y sont accessibles via leurs URL, il sera également possible d’accéder à des dossiers et à la liste des fichiers qu’ils contiennent selon la configuration du serveur même si généralement, on considérera que ce n’est pas souhaitable.

Pourquoi vouloir créer un accès sécurisé à des fichiers ?

Il peut être pertinent de créer un accès sécurisé à des fichiers dans de nombreux cas. Vous pourriez par exemple vouloir restreindre l’accès d’un fichier aux personnes ayant un compte sur le site, aux personnes ayant préalablement payé pour accéder à ce fichier ou à la personne ayant ajouté ce fichier sur votre plateforme. 

Dans l’ensemble de ces cas de figure, exposé ces fichiers dans le dossier public n’est pas envisageable, car il serait alors accessible toute personne possédant l’URL du fichier, ce qui ne serait pas vraiment sécurisé. 

Comment créer un accès sécurisé à des fichiers statiques ?

Heureusement, avec Symfony, créer un accès sécurisé est très simple.

Tout d’abord, il faudra créer un dossier dans le projet qui ne soit pas dans le dossier public. Dans notre exemple, nous créerons le dossier secure_image à la racine d’un projet Symfony classique où nous placerons un fichier cat.png.

Structure de projet Symfony

Ensuite, vous devrez créer un controller dans lequel vous ajouterez une action qui renverra le fichier sécurisé. Dans notre exemple, nous créerons le controller PublicController qui se trouvera dans le dossier src/Controller


<?php

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class PublicController extends AbstractController
{
    //..
}

Dans notre nouveau controller, on ajoutera l’action suivante :


<?php

#[Route('/', name: 'app_public')]
public function index(): Response
{
    $isAllowed = /* Condition pour accéder au fichier */;

    if ($isAllowed) {
        return new BinaryFileResponse(__DIR__ . '/../../secure_image/cat.png');
    }
    
    // Renvoi une réponse avec un code 403
    return new Response(status: Response::HTTP_FORBIDDEN);
}

Dans cette action après avoir contrôlé, si l’utilisateur a le droit d’accéder au fichier, vous pouvez utiliser la classe BinaryFileResponse pour retourner le fichier, cette dernière aura besoin que vous lui passiez le chemin du fichier en paramètre. Si l’utilisateur n’a pas le droit d’accéder au fichier, vous pourrez renvoyer une erreur avec le code 403.

Voilà, vous savez maintenant comment créer un accès sécurisé à des fichiers simplement avec Symfony

Publié le 5 nov. 2024, 15:50
Yann-Élias Bellagnech
Yann-Élias Bellagnech
Développeur Web
Passionné par le développement web, j'accompagne les entreprises, les agences et les indépendants dans la création de site internet de qualité.