Créer une page phpinfo sécurisée avec Symfony et le bundle EasyAdmin

🇬🇧 

Your browser uses a different language of the article's one. Do you want to read it in English?

C'est le tout premier article du blog technique Tokeeen. Il est très simple à comprendre et vous pourrez le mettre en application dans votre projet en quelques minutes.

Publié le 13/01/2019 par COil (Mis à jour le 26/01/2019)

Symfony  Symfony3  bundle  admin  EasyAdminBundle  security 

Publié dans "Une semaine Symfonique n°576" sur Symfony.com

But

Le but de cet article est de vous montrer comment ajouter une nouvelle entrée dans votre administration easy admin qui va ouvrir une page phpinfo() uniquement accessible par les administrateurs sur votre serveur de production. Une page phpinfo() est toujours utile parce qu'elle donne de nombreuses informations sur la manière dont est configuré votre serveur. Aussi, parfois vous n'avez pas un accès SSH sur le serveur de production. S'il y a une équipe infrastructure dédiée par exemple. Mais comme cette page contient beaucoup d'informations, son accès doit être restreint aux administrateurs ou développeurs du projet.

Uploader un fichier PHP contenant le script suivant <?php phpinfo() à la racine de votre répertoire /web, même avec un nom aléatoire, est donc une très mauvaise pratique. Un tel fichier ne devrait jamais être mis à disposition sur un serveur web car celui-ci doit exposer le moins d'information possible le concernant.

Intégrez une page phpinfo sécurisée dans votre administration

Configuration

This post was written using the following components:

Pré-requis :

Nous allons considérer que vous êtes déjà familier avec Symfony, le bundle EasyAdminBundle, son installation et sa configuration de base.

C'est parti !

Configuration du bundle easy admin :

Tout d'abord modifiez la configuration easy admin et ajoutez l'entrée suivante :

easy_admin:
    design:
        menu:
            label: System
            icon: 'server'
            children:
                - { label: 'PHP Info', route: easyadmin_phpinfo, icon: 'info' }

easyadmin_phpinfo est le nom de la route de l'action personnalisée que nous allons ajouter dans dans notre contrôleur d'administration. Le reste est explicite. Jetez un coup d'œil à la documentation du bundle à propos de la configuration du menu.

L'action

Notre action personnalisée va être très simple :

<?php

// src/AppBundle/Controller/Admin/AdminController.php

namespace AppBundle\Controller\Admin;

use EasyCorp\Bundle\EasyAdminBundle\Controller\AdminController as BaseAdminController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

/**
 * Extends the easy admin default controller for custom actions.
 *
 * @Route("/admin")
 */
class AdminController extends BaseAdminController
{
    /**
     * @Route("/phpinfo", name="easyadmin_phpinfo")
     */
    public function phpInfoAction(): Response
    {
        if ($this->container->has('profiler')) {
            $this->container->get('profiler')->disable();
        }
        ob_start();
        phpinfo();
        $str = ob_get_contents();
        ob_get_clean();

        return new Response($str);
    }
}

Pour accéder à cette page, accédez à /admin/phpinfo (Si vous utilisez la configuration par défaut.). Si vous n'êtes pas connecté ou si vous n'avez pas les droits d'administration vous serez redirigé vers le formulaire de login de votre application. Jetez un coup d'œil à la documentation pour voir comment étendre le contrôleur d'administration par défaut.

Le saviez-vous ?

Quand vous utilisez l'environnement de développement (avec la barre de debug), le profileur inclut déjà une page phpinfo. Accédez à /app_dev.php/_profiler/phpinfo ou utilisez le lien "View full PHP configuration" dans le panneau "Configuration" du profileur.

Lien vers la page phpinfo dans le panneau configuration du profileur Symfony

A propos de ce blog

C'était le tout premier article sur ce blog technique. Celui-ci était assez basique et il nous a permis d'initialiser ce blog. Si vous lisez ceci entre le 14 janvier 2018 et le 3 février 2018, ce contenu est presque juste un template Twig (avec i18n). Rien de compliqué !

Chez Tokeeen, nous avons une démarche hyper pragmatique. Le code ne doit pas être compliqué et nous ne développons des fonctionnalités uniquement quand nous en avons vraiment besoin. Donc au fur et à mesure que nous écrirons des nouveaux articles, nous allons refactoriser, nettoyer ce qu'on a écrit précédemment et ajouter des tests. Nous répéterons ce processus jusqu'à obtenir quelque chose qui corresponde parfaitement à nos besoins : pas plus, pas moins !

Et maintenant ?

Nous avons déjà de nombreuses idées, dans les prochaines semaines nous parlerons de :

A vous de jouer !

Ces articles vous ont été utiles ? Vous pouvez nous aider à votre tour de plusieurs manières :


Merci de nous avoir lu et à très bientôt sur Tokeeen ! 😉

COil


profile for Tokeeen.com at Stack Overflow, Q&A for professional and enthusiast programmers



PS: Pour des raison de sécurité l'URL /admin de ce site a été changée avec un token aléatoire.