如何在Laravel输出的屏幕上隐藏我的密码和其他敏感环境变量?
有时其他人正在研究我的开发工作。如果抛出异常,我不希望他们看到这些秘密,但我也不想继续打开和关闭调试,或者只是为了快速预览而启动专用站点。
从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',
],
],
];
结果输出:
谢谢Jeff和Raheel的帮助,但我刚发现了一点问题:
即使我清除了_ENV
中的所有环境键,也会通过列出的_SERVER
变量显示相同的键。
在config/app.php
中添加以下代码将隐藏whoops页面中的所有环境变量:
'debug_blacklist' => [
'_SERVER' => array_keys($_ENV),
'_ENV' => array_keys($_ENV),
],
我做了一个package来解决这个问题。
只需使用即可安装
composer require glaivepro/hidevara
大多数服务器和所有env变量都将被删除。 $_POST
中任何类似密码的字段都会隐藏其值。
您也可以使用黑名单或白名单方式对其进行自定义,以显示/混淆/删除您喜欢的字段。
@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"
干杯!
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,
],
];
我很感激能有更好的解决方案。