web-dev-qa-db-ja.com

Laravel whoops出力で.envパスワードを非表示にする方法は?

Laravelのwhoops出力でパスワードやその他の機密環境変数を画面上で非表示にするにはどうすればよいですか?

他の人が私の開発作業を見ていることもあります。例外がスローされた場合、これらの秘密を彼らに見せたくありませんが、デバッグのオンとオフを切り替えたり、簡単なプレビューのために専用サイトを起動したりする必要もありません。

whoops output screenshot with passwords shown

39
Jeff Puckett

Laravel 5.5.13の時点で、キーconfig/app.phpの下のdebug_blacklistの特定の変数をブラックリストに登録できる 新しい機能 があります。例外がスローされると、whoopsは各文字に対してこれらの値をアスタリスク*でマスクします。

たとえば、この[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',
        ],
    ],
];

この出力の結果:

whoops exception page

68
Jeff Puckett

まず、上記のジェフのソリューションが大好きです。

2番目に、私と同じように、すべてのenv variablesを非表示にして、まだwhoopsを使用する場合は、次の解決策があります。

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

出力:

enter image description here

46
Raheel Hasan

手伝ってくれたジェフとラヒールに感謝しますが、ちょっとした落とし穴が見つかりました。

_ENVからすべての環境キーを消去しても、リストされている_SERVER変数を通じて同じキーがまだ公開されています。

config/app.phpに以下のコードを追加すると、whoopsページからすべての環境変数が非表示になります。

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

@jeff + @raheelによる解決策は素晴らしい!!!最近、プロジェクトで1つまたは2つのプロパティをホワイトリストに登録したいことがわかったため、上記に基づいて、デバッグする特定のプロパティを次のようなものでホワイトリストに登録できます。

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

そのリストを.env経由で設定できるようにしたい場合は、次のようなことができます:

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

次に、.envで、次のようなことを行います。

DEBUG_SERVER_WHITELIST="APP_URL,QUERY_STRING"

乾杯!

4

この問題を解決するために package を作成しました。

を使用してインストールするだけです

composer require glaivepro/hidevara

ほとんどのサーバーとすべてのenv変数が削除されます。 $_POSTのパスワードのようなフィールドは、値が非表示になります。

ブラックリストまたはホワイトリストのアプローチでカスタマイズして、好きなようにフィールドを表示/難読化/削除することもできます。

4
Džuris

Laravel 5.6は私の場合は機能しません。しかし、これは動作します:

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

より良い解決策に感謝します。

2
Ohne Not Silas