我的.env中的变量显示错误

时间:2018-02-22 00:18:51

标签: security lumen

我刚刚开始使用laravel的流明,并设法让它在本地和服务器上工作,当我即将开始探索它时,我的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或其他东西运行它,所以我去服务器上尝试了同样的事情。

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

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

其他信息:

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

许多人(包括我在内)已经通知他们这确实没有完成,但是开发人员似乎并不在乎。实际上,这是世界上唯一认为可以在调试页面中打印关键信息的框架。当然,访问者应该永远不会看到堆栈跟踪,SQL查询,代码段...但是环境变量是机密的,并且永远都不会以HTTP响应结尾。

我最好的建议是使用专业的MVC框架,例如ASP.net,codeigniter或yii,因为这并不能说明Laravel开发人员也认为可以这样做...

如果另一方面您还是决定使用Laravel,则可以使用以下软件包:https://github.com/GlaivePro/Hidevara 设置非常简单,只需确保您不会忘记app-> extend指令即可。 在生产服务器上,您不得运行“ composer install”,而应运行“ composer instal --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