Comment masquer mes mots de passe et autres variables d'environnement sensibles à l'écran dans la sortie whoops de Laravel?
Parfois, d'autres personnes regardent mon travail de développement. Je ne veux pas qu'ils voient ces secrets si une exception est levée, mais je ne veux pas non plus avoir à continuer d'activer ou de désactiver le débogage, ou à créer un site dédié juste pour un aperçu rapide.
À partir de Laravel 5.5.13, il y a ne nouvelle fonctionnalité qui vous permet de mettre en liste noire certaines variables de config/app.php
sous la clé debug_blacklist
. Quand une exception est levée, whoops masque ces valeurs avec des astérisques *
pour chaque personnage.
Par exemple, étant donné ce config/app.php
return [
// ...
'debug_blacklist' => [
'_ENV' => [
'APP_KEY',
'DB_PASSWORD',
'REDIS_PASSWORD',
'MAIL_PASSWORD',
'PUSHER_APP_KEY',
'PUSHER_APP_SECRET',
],
'_SERVER' => [
'APP_KEY',
'DB_PASSWORD',
'REDIS_PASSWORD',
'MAIL_PASSWORD',
'PUSHER_APP_KEY',
'PUSHER_APP_SECRET',
],
'_POST' => [
'password',
],
],
];
Résultats dans cette sortie:
Merci Jeff et Raheel pour leur aide, mais je viens de trouver un petit casse-tête
Même si j'efface toutes les clés d'environnement de _ENV
, les mêmes touches sont TOUJOURS exposées à travers le _SERVER
variables répertoriées.
Ajout du code ci-dessous dans config/app.php
cacherait toutes les variables d’environnement de la page whoops:
'debug_blacklist' => [
'_SERVER' => array_keys($_ENV),
'_ENV' => array_keys($_ENV),
],
La solution de @jeff + @raheel est géniale !!! Sur un projet récemment, nous avons constaté que nous voulions parfois ajouter à la liste blanche une ou deux propriétés. Par conséquent, en vous basant sur ce qui précède, vous pouvez ajouter à la liste blanche les propriétés que vous souhaitez déboguer avec quelque chose comme:
'debug_blacklist' => [
'_COOKIE' => array_diff(array_keys($_COOKIE), array()),
'_SERVER' => array_diff(array_keys($_SERVER), array('APP_URL', 'QUERY_STRING')),
'_ENV' => array_diff(array_keys($_ENV), array()),
],
Si vous souhaitez autoriser la configuration de cette liste via .env, vous pouvez procéder de la manière suivante:
'debug_blacklist' => [
'_COOKIE' => array_diff(
array_keys($_COOKIE),
explode(",", env('DEBUG_COOKIE_WHITELIST', ""))
),
'_SERVER' => array_diff(
array_keys($_SERVER),
explode(",", env('DEBUG_SERVER_WHITELIST', ""))
),
'_ENV' => array_diff(
array_keys($_ENV),
explode(",", env('DEBUG_ENV_WHITELIST', ""))
),
],
Ensuite, dans votre .env, faites quelque chose comme:
DEBUG_SERVER_WHITELIST="APP_URL,QUERY_STRING"
À votre santé!
J'ai fait un package pour résoudre ce problème.
Il suffit de l'installer en utilisant
composer require glaivepro/hidevara
La plupart du serveur et toutes les variables env seront supprimés. Tous les champs de type mot de passe dans $_POST
aura leurs valeurs cachées.
Vous pouvez également le personnaliser en utilisant la liste noire ou la liste blanche pour afficher/masquer/supprimer les champs comme vous le souhaitez.
Laravel 5.6 ne fonctionne pas pour moi. mais cela fonctionne:
$envKeys = [];
$serverKeys = [];
$cookieKeys = [];
foreach ( $_ENV as $key => $value ) { if(is_string($value)) $envKeys[] = $key; }
foreach ( $_SERVER as $key => $value ) { if(is_string($value)) $serverKeys[] = $key; }
foreach ( $_COOKIE as $key => $value ) { if(is_string($value)) $cookieKeys[] = $key; }
return [
// ...
'debug_blacklist' => [
'_COOKIE' => $cookieKeys,
'_SERVER' => $serverKeys,
'_ENV' => $envKeys,
],
];
Je serais reconnaissant pour une meilleure solution.