75 votes

Comment masquer les mots de passe .env dans la sortie Laravel Whoops ?

Comment puis-je 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 en cas d'exception, mais je ne veux pas non plus devoir basculer constamment le débogage ou créer un site dédié juste pour un aperçu rapide.

capture d'écran de la sortie whoops avec les mots de passe affichés

112voto

Jeff Puckett Points 13157

Dès Laravel 5.5.13, vous pouvez censurer les variables en les répertoriant sous la clé debug_blacklist dans config/app.php. Lorsqu'une exception est lancée, Whoops masquera ces valeurs avec des astérisques * pour chaque caractère.

Par exemple, en utilisant 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ésulte en cette sortie:

page d'exception Whoops

1 votes

Il pourrait être utile de soumettre une pull request pour la documentation de Laravel.

0 votes

@JeffPuckett Ah, vous avez raison, j'ai pensé à tort que .13 est inférieur à .4 comme vous le feriez avec des décimales

0 votes

Y a-t-il une raison pour laquelle cela ne fonctionnera pas dans Laravel 5.7? J'ai trouvé registerBlacklist à l'intérieur de WhoosHander sous les Fondations de Laravel, mais autant que je puisse dire, il n'est pas utilisé.

79voto

Raheel Hasan Points 1317

Tout d'abord, j'adore la solution de Jeff ci-dessus.

Ensuite, si comme moi vous voulez masquer toutes les variables d'environnement tout en utilisant toujours whoops, voici une solution:

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

Sortie:

entrez la description de l'image ici

MODIFIER: La légende raconte qu'à partir de Laravel 7x, vous auriez besoin de la clé debug_hide à la place

24 votes

Merci pour cela. Je suis toujours confus pourquoi les gens voudraient que toutes les variables d'environnement soient imprimées à l'écran à chaque erreur.

6 votes

Exactement homme .. peut-être dire 10% le voudrait .. mais PAS 90% des développeurs Laravel!

8 votes

Entendu ! J'ai accidentellement exposé ma clé d'API de mailgun il y a quelques mois, ce qui a résulté en plus de 1200 e-mails de phishing qui sont passés par mon compte. Horrible ! Si jamais j'ai besoin de voir ce qu'il y a dans mon environnement, je le fais à l'ancienne en ouvrant la foutue chose !

12voto

erlangsec Points 1546

Merci Jeff et Raheel pour votre aide, mais je viens de trouver un petit piège :

Même si je supprime toutes les clés d'environnement de _ENV, les mêmes clés sont TOUJOURS exposées à travers les variables _SERVER listées.

Ajouter le code ci-dessous dans config/app.php masquerait toutes les variables d'environnement de la page whoops :

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

0 votes

Et en quoi cela diffère-t-il de la réponse de Raheel, mis à part la suppression de la ligne de cookie dans votre code ? A-t-il modifié sa réponse après la vôtre ?

5 votes

Il existe une différence subtile mais significative entre '_SERVER' => array_keys($_SERVER) et '_SERVER' => array_keys($_ENV).

8voto

Džuris Points 280

J'ai créé un package pour résoudre ce problème.

Il suffit de l'installer en utilisant

composer require glaivepro/hidevara

La plupart des variables serveur et toutes les variables d'environnement seront supprimées. Tous les champs ressemblant à des mots de passe dans $_POST auront leurs valeurs masquées.

Vous pouvez également le personnaliser en utilisant l'approche de liste noire ou liste blanche pour afficher/obscurcir/supprimer les champs à votre guise.

8voto

La solution de @jeff + @raheel est géniale !!! Sur un projet récent, nous avons constaté que nous voulions parfois autoriser une ou deux propriétés, donc en nous basant sur ce qui précède, vous pouvez autoriser des propriétés spécifiques que vous voulez 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 que cette liste puisse être configurée via .env, vous pouvez faire quelque chose comme :

'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"

Santé!

0 votes

Je voudrais simplement mentionner que ceci peut être ajouté dans app.php

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X