【问题标题】:Variables from my .env are shown on error我的 .env 中的变量显示错误
【发布时间】:2018-08-01 17:28:45
【问题描述】:

我刚开始使用 laravel 的 lumen 并设法让它在本地和服务器上都工作,当我即将开始探索它时,我的 index.php 只包含:

$app = require __DIR__."/../lumenTest/bootstrap/app.php";
$app->run($app->make('request'));
echo $myundefinedvariable;

显示 ErrorException: 未定义变量:myundefinedvariable,但在“...at Application->Laravel\Lumen\Concerns{closure}”窗口内我可以看到一堵巨大的文字墙,其中包含以下内容:

... 'APP_KEY' => 'fake0BqKgHeC72EmT7039B6pDCsJ90key' , ...,  'DB_PASSWORD' => 'secret', ...

我的第一个想法是,可能是因为我用 XAMPP 或其他东西在本地运行它,所以我去服务器上尝试了它,同样的事情发生了。

我的 .env 文件中的敏感数据在出现任何 php 错误后显示给所有人是否正常?

有没有办法避免这种情况发生? (与没有任何 PHP 错误不同,因为我倾向于很多)。

附加信息:

  • PHP 版本 7.1.12
  • Lumen (5.6.1)(Laravel 组件 5.6.*)
  • “lumenTest”目录比我的wwwpublic 高一级,并且.env 所在的位置,该站点位于Linux 服务器共享主机上

【问题讨论】:

标签: security lumen


【解决方案1】:

不,这不正常。专业开发人员认为这是一种超自然的行为。这就是为什么公司甚至不考虑使用 Laravel 的确切原因。

很多人(包括我)已经通知他们这真的没有完成,但开发人员似乎并不在意。事实上,它是世界上唯一认为可以在调试页面中打印关键信息的框架。当然,访问者永远不应该看到堆栈跟踪、sql 查询、代码片段……但是环境变量是机密的,永远不应该出现在 HTTP 响应中。

我的最佳建议是使用专业的 MVC 框架,如 ASP.net、codeigniter 或 yii,因为不知道 Laravel 开发人员也认为可以做什么......

另一方面,如果你决定使用 Laravel,有一个包可以解决这个问题:https://github.com/GlaivePro/Hidevara 它真的很容易设置,只要确保你不要忘记 app->extend 指令。 在生产服务器上,您不能运行“composer install”,而是“composer install --no-dev”。这样 filp/whoops 将(应该,希望)不会被安装并且不能被触发。

对于专业发展,我当然建议不要使用 Laravel,因为他们认为可接受的标准似乎非常低。

附带说明:开发人员声称当 APP_DEBUG=false 时不会出错,但过去的事件表明,当禁用调试模式时可以触发 whoops 处理程序。 https://www.google.com/amp/s/blog.hacken.io/dangers-of-laravel-debug-mode-enabled%3fhs_amp=true

【讨论】:

    【解决方案2】:

    是的,如果您启用了调试模式,则可以显示与错误相关的任何类型的数据。这肯定会包括在调试时有用的敏感数据。

    对于生产,您希望私下记录所有错误,而不是公开显示。因此,您需要在 .env 文件中使用 debug=false。

    如果在调试模式已设置为 false 时发生这种情况,您将需要在服务器级别配置错误的隐藏/记录。

    【讨论】:

      猜你喜欢
      • 2020-01-26
      • 1970-01-01
      • 2020-05-06
      • 2019-08-17
      • 2018-12-11
      • 2021-03-19
      • 2016-12-21
      • 2019-01-26
      • 1970-01-01
      相关资源
      最近更新 更多