相关疑难解决方法(0)

当应用程序通过GuzzleHttp相互调用时,Laravel环境变量在应用程序之间泄漏

我在本地计算机上有两个Laravel 5.2应用程序(我们称之为A和B),它们都在我本地Apache 2.4开发服务器上的两个不同的虚拟主机上配置.

这两个应用程序有时通过GuzzleHttp相互调用.

有一次我想使用加密,我开始从Laravel的Encrypter获得"mac is invalid"异常.

在调查问题时,我发现当应用A调用应用B时,应用B突然从应用A获取加密密钥(app.key)!这会导致加密中断,因为应用B上的值使用应用的B加密密钥进行加密.

在调试时,我发现Dotenv库有一些逻辑来保存现有变量(如果已设置).我发现$ _ENV和$ _SERVER都没有泄漏变量,但getenv()有它们!

我有点困惑,因为PHP putenv说:

环境变量仅在当前请求的持续时间内存在.

似乎,如果在当前请求期间我通过GuzzleHttp发出另一个请求,Dotenv在A中使用的变量putenv()突然变得可以在应用B中使用,这是由GuzzleHttp请求的!

我知道在生产服务器上这不会是一个问题,因为将使用配置缓存而不是Dotenv,并且很可能两个应用程序都将在不同的Apache服务器上运行,但这种行为正在破坏我的开发过程.

如何配置Laravel或GuzzleHttp或Apache或PHP以防止putenv()从应用程序A泄漏到应用程序B?

php apache laravel guzzle

9
推荐指数
1
解决办法
1744
查看次数

标签 统计

apache ×1

guzzle ×1

laravel ×1

php ×1