Wie verstecke ich .env-Passwörter in der Laravel-Whoops-Ausgabe?

Lesezeit: 6 Minuten

Wie kann ich meine Passwörter und andere sensible Umgebungsvariablen auf dem Bildschirm in der Whoops-Ausgabe von Laravel verbergen?

Manchmal schauen sich andere Leute meine Entwicklungsarbeit an. Ich möchte nicht, dass sie diese Geheimnisse sehen, wenn eine Ausnahme ausgelöst wird, aber ich möchte auch nicht ständig das Debuggen ein- und ausschalten oder eine dedizierte Website nur für eine schnelle Vorschau einrichten müssen.

Whoops-Ausgabe-Screenshot mit angezeigten Passwörtern

Benutzer-Avatar
Jeff Puckett

Ab Laravel 5.5.13können Sie Variablen zensieren, indem Sie sie unter dem Schlüssel auflisten debug_blacklist in config/app.php. Wenn eine Ausnahme ausgelöst wird, maskiert Whoops diese Werte mit Sternchen * für jeden Charakter.

In Anbetracht dessen beispielsweise 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',
        ],
    ],
];

Ergebnisse in dieser Ausgabe:

Whoops-Ausnahmeseite

  • Es könnte nützlich sein, eine Pull-Anfrage für die Laravel-Dokumente zu stellen

    – Christophvh

    25. September 2017 um 14:54 Uhr

  • @JeffPuckett Ah, du hast Recht, ich dachte fälschlicherweise, dass .13 niedriger als .4 ist, wie du es mit Dezimalstellen tun würdest

    – ii7scw

    5. Oktober 2017 um 20:33 Uhr

  • Gibt es einen Grund, warum dies in Laravel 5.7 nicht funktioniert? ich fand registerBlacklist innerhalb des WhoosHander unter Laravels Foundations, aber soweit ich das beurteilen kann, wird es nicht verwendet.

    – Adam Patterson

    17. Juni 2019 um 20:15 Uhr

Benutzer-Avatar
Rahel Hasan

Lieben Sie zunächst die Lösung von Jeff oben.

Zweitens, wenn du wie ich alles verstecken willst env variables Während Sie immer noch Whoops verwenden, ist hier eine Lösung:

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

Ausgabe:

Geben Sie hier die Bildbeschreibung ein

BEARBEITEN:
Der Legende nach bräuchte man seit Laravel 7x debug_hide Schlüssel statt

  • Danke dafür. Ich bin immer noch verwirrt, warum die Leute wollen, dass alle env-Variablen bei jedem Fehler auf dem Bildschirm gedruckt werden.

    – warmer Whisky

    14. Dezember 2017 um 5:24 Uhr

  • genau Mann … vielleicht sagen 10% würden es wollen … aber NICHT 90% der Laravel-Entwickler!

    – Rahel Hasan

    14. Dezember 2017 um 5:36 Uhr


  • Hört hört! Ich habe vor ein paar Monaten versehentlich meinen Mailgun-API-Schlüssel offengelegt, was dazu führte, dass über 1200 Phishing-E-Mails über mein Konto gingen. Schrecklich! Wenn ich jemals sehen muss, was in meinem Env ist, mache ich es auf die altmodische Art, indem ich das verdammte Ding öffne!

    – warmer Whisky

    14. Dezember 2017 um 5:44 Uhr

  • exakt!! Wenn ich meine env kennen muss, würde ich einfach die env-Datei öffnen und die env NICHT versehentlich auf einer Seite verfügbar machen, von der ich ungefähr eine Woche lang keine Ahnung habe

    – Rahel Hasan

    14. Dezember 2017 um 6:16 Uhr

  • Vielen Dank. Gute Antwort.

    – Benutzer2094178

    19. Dezember 2017 um 1:41 Uhr

Danke Jeff und Raheel für die Hilfe, aber ich habe gerade ein kleines Problem gefunden:

Auch wenn ich alle Environment Keys aus lösche _ENVdie gleichen Schlüssel werden NOCH durch die ausgesetzt _SERVER Variablen aufgeführt.

Fügen Sie den folgenden Code hinzu config/app.php würde alle Umgebungsvariablen von der Whoops-Seite ausblenden:

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

  • Und wie unterscheidet sich das von der Antwort von Raheel, abgesehen von der Cookie-Zeile in Ihrem Code? Oder hat er seine Antwort nach Ihrer bearbeitet?

    – Marcel Cozma

    28. September 2018 um 5:16 Uhr

  • Es gibt einen feinen, aber signifikanten Unterschied zwischen ‘_SERVER’ => array_keys($_SERVER) und ‘_SERVER’ => array_keys($_ENV).

    – erlangsec

    5. Oktober 2018 um 10:32 Uhr

Ich habe eine gemacht Paket um dieses Problem zu lösen.

Installieren Sie es einfach mit

composer require glaivepro/hidevara

Der größte Teil des Servers und alle Umgebungsvariablen werden entfernt. Alle passwortähnlichen Felder in $_POST werden ihre Werte verborgen haben.

Sie können es auch entweder im Blacklist- oder Whitelist-Ansatz anpassen, um Felder nach Belieben anzuzeigen / zu verschleiern / zu entfernen.

Die Lösung von @jeff + @raheel ist super!!! Bei einem Projekt haben wir kürzlich festgestellt, dass wir manchmal ein oder zwei Eigenschaften auf die Whitelist setzen wollten. Aufbauend auf dem oben Gesagten können Sie also bestimmte Eigenschaften, die Sie debuggen möchten, mit etwas wie dem folgenden auf die Whitelist setzen:

'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()),
],

Wenn Sie zulassen möchten, dass diese Liste über .env konfiguriert wird, können Sie Folgendes tun:

'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', ""))
    ),
],

Machen Sie dann in Ihrer .env-Datei so etwas wie:

DEBUG_SERVER_WHITELIST="APP_URL,QUERY_STRING"

Prost!

  • Ich möchte nur erwähnen, dass dies hinzugefügt werden kann app.php

    – Jesse Orange

    23. Juli 2019 um 12:13 Uhr

Benutzer-Avatar
Jenis Patel

Normalerweise für die lokale Entwicklung sollten wir das einstellen APP_DEBUG Umgebungsvariable zu Stimmt. Damit wir bessere Einblicke in den Debugging-Fehler und die Warnungen haben.

Aber in der Produktionsumgebung sollte dieser Wert immer sein FALSCH. Wenn der Wert auf eingestellt ist Stimmt In der Produktion riskieren Sie, den Endbenutzern Ihrer Anwendung vertrauliche env-Passwörter preiszugeben.

Ab Laravel 5.5.x bietet auch eine Lösung dafür.

Sie müssen nur die hinzufügen debug_blacklist Option in Ihrer config/app.php Konfigurationsdatei. Nach dem Hinzufügen dieser Option wird Laravel dies tun schwarze Liste alle Schlüssel, die in erwähnt werden debug_blacklist Option mit Sternchen.

Sie können es auf zwei Arten verwenden:

Methode 1 – Setzen Sie ausgewählte ENV-Schlüssel und Kennwörter auf die schwarze Liste

return [
    // ...
    'debug_blacklist' => [
        '_ENV' => [
            'APP_KEY',
            'DB_PASSWORD',
        ],
        '_SERVER' => [
            'APP_KEY',
            'DB_PASSWORD',
        ],
        '_POST' => [
            'password',
        ],
    ],
];

Methode 2 – Setzen Sie alle ENV-Schlüssel und Passwörter auf die schwarze Liste

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

Referenz entnommen aus: https://techjeni.com/how-to-secure-and-hide-env-passwords-from-laravel-debug-output/

  • Ich möchte nur erwähnen, dass dies hinzugefügt werden kann app.php

    – Jesse Orange

    23. Juli 2019 um 12:13 Uhr

Benutzer-Avatar
Silas

Laravel 5.6 funktioniert bei mir nicht. aber das funktioniert:

$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,
    ],
];

Für eine bessere Lösung wäre ich dankbar.

1344900cookie-checkWie verstecke ich .env-Passwörter in der Laravel-Whoops-Ausgabe?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy