如何在Laravel输出中隐藏.env密码?

问题描述 投票:34回答:6

如何在Laravel输出的屏幕上隐藏我的密码和其他敏感环境变量?

有时其他人正在研究我的开发工作。如果抛出异常,我不希望他们看到这些秘密,但我也不想继续打开和关闭调试,或者只是为了快速预览而启动专用站点。

whoops output screenshot with passwords shown

php laravel environment-variables secret-key whoops
6个回答
67
投票

从Laravel 5.5.13开始,有a new feature允许你在密钥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


46
投票

首先,热爱Jeff的解决方案。

2,如果像我一样你想隐藏所有的env variables,同时仍然使用哎呀,这是一个解决方案:

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

输出:

enter image description here


7
投票

谢谢Jeff和Raheel的帮助,但我刚发现了一点问题:

即使我清除了_ENV中的所有环境键,也会通过列出的_SERVER变量显示相同的键。

config/app.php中添加以下代码将隐藏whoops页面中的所有环境变量:

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

4
投票

我做了一个package来解决这个问题。

只需使用即可安装

composer require glaivepro/hidevara

大多数服务器和所有env变量都将被删除。 $_POST中任何类似密码的字段都会隐藏其值。

您也可以使用黑名单或白名单方式对其进行自定义,以显示/混淆/删除您喜欢的字段。


3
投票

@jeff + @raheel的解决方案很棒!!!在最近的一个项目中,我们发现我们有时希望将一两个属性列入白名单,因此在上面的基础上,您可以将要调试的特定属性列入白名单,例如:

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

干杯!


2
投票

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

我很感激能有更好的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.