web-dev-qa-db-fra.com

Comment cacher les mots de passe .env dans Laravel whoops output?

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.

whoops output screenshot with passwords shown

39
Jeff Puckett

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

whoops exception page

68
Jeff Puckett

Tout d’abord, adorons la solution de Jeff ci-dessus.

2e, si comme moi tu veux cacher tous les env variables tout en utilisant whoops, voici une solution:

'debug_blacklist' => [
        '_COOKIE' => array_keys($_COOKIE),
        '_SERVER' => array_keys($_SERVER),
        '_ENV' => array_keys($_ENV),        
    ],

Sortie:

enter image description here

46
Raheel Hasan

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),        
],
7
erlangsec

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

4
Benjamin Listwon

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.

4
Džuris

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.

2
Ohne Not Silas