Créer une page phpinfo sécurisée avec Symfony et le bundle EasyAdmin
🇬🇧
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 securityPublié 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.
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);
}
}
- Nous désactivons le profileur Symfony car nous ne voulons pas qu'il pollue la sortie de la fonction
phpinfo()
qui contient déjà tout ce dont elle a besoin. - Ensuite nous capturons la sortie de la fonction
phpinfo()
et retournons une réponse basique avec ce contenu. C'est tout !
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.
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 :
- Développement de ce blog de 0.
- i18n (internationalisation) et le basculement entre différentes langues (Regardez le lien avec le drapeau en haut à droite dans le menu.).
- Comment utiliser un CDN pour vos assets.
- Comment optimiser simplement vos assets.
- ...
A vous de jouer !
Ces articles vous ont été utiles ? Vous pouvez nous aider à votre tour de plusieurs manières :
- Créez un compte et testez Tokeeen qui est encore en phase BETA.
- Vous inscrire à la newsletter et être averti du lancement officiel de notre service.
- Abonnez-vous au flux RSS.
- Suivez nous sur Twitter
- Nous remonter des erreurs ou typos (utilisez le formulaire de contact).
- Nous remonter des choses qui pourraient être améliorées.
Merci de nous avoir lu et à très bientôt sur Tokeeen ! 😉
Suivez C0il sur Twitter
PS: Pour des raison de sécurité l'URL /admin
de ce site a été changée avec un token aléatoire.