繁体   English   中英

如何保护存储在Laravel环境文件中的数据库凭据?

[英]How to secure database credentials stored in Laravel environment files?

我最近切换到Laravel的基于环境的应用程序部署,我决定使用$ _ENV在.env文件中存储我的本地和生产服务器的凭据但是我发现调试打开时会发生异常并引发错误显示公开数据库凭据的环境变量。

现在我确定调试将始终关闭生产,因为这是我默认的,然后我在我的本地环境的本地文件夹中覆盖它,但是, 如果某种程度上某些方式调试在生产时打开并且用户强制执行404例外,他们需要做的就是读取页面,直到他们在普通视图中看到环境变量暴露凭证。 在文档中,它表示对任何“真实”应用程序来说,保持数据库凭据远离实际配置是最佳做法。 我在这里可能有点偏执。

有没有办法可以限制laravel显示的调试屏幕中显示的内容?

我刚刚遇到了同样的问题,而我正在处理的项目要求我暂时打开我的开发机器到邪恶的外部世界来测试一些API回调。

因此,每当触发whoops时,我都会暴露所有宝贵的密钥和密码。 即使它是一个盲目的API回调机器,他们有机会记录对他们的请求的响应和一些工程师筛选它们并找到一些AWS密钥,不,谢谢。

这就是我现在使用的:

App::error(function (Exception $exception, $code)
{
    // Never, ever, use environment variables in responses, not even when debugging
    $_SERVER = array_except($_SERVER, array_keys($_ENV));
    $_ENV = [];
});

Laravel使用Whoops( filp/whoops whoops)来创建调试页面,你可以在这里看到它使用$_ENV来获取环境变量。 虽然不是很理想,但你可以简单地清空$_ENV ,以防在本地以外的任何环境中抛出错误。

通过在app/start/global.php简单地重写App::error (也可能是App::fatal ),这非常简单:

App::error(function(Exception $exception, $code) {
    Log::error($exception);

    if (App::environment() !== 'local') {
        $_ENV = [];
    }
});

这是有效的,因为异常处理程序在Whoops处理程序之前调用。

现在, 正确更好的方法是创建一个扩展Whoops\\Handler\\PrettyPageHandler的类,它不会显示环境变量或更改任何其他不需要的行为,并根据环境将其注册为whoops.handler组件对于您的应用程序,类似于在Illuminate\\Exception\\ExceptionServiceProvider:registerPrettyWhoopsHandler 不过,我认为这不值得那么麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM