Symfony.env生产模式下的安全密码

Symfony.env生产模式下的安全密码,symfony,symfony4,Symfony,Symfony4,这对某些人来说可能是个愚蠢的问题,我可能会得到一些反对票,但我需要知道 如何在Symfony 4.2中保护生产模式的密码(敏感信息) 我想,当我编译composer dump env prod时,它将是安全的,对公众不可见,但如果我运行phpinfo()我可以在纯文本中查看我的所有密码 DATABASE_URL MAILER_URL 我是否应该像以前一样将它们存储在参数下的services.yaml中? 但是为什么我们甚至有.env文件呢 或者,只要没有人能够访问我服务器的CLI,我就不应该为

这对某些人来说可能是个愚蠢的问题,我可能会得到一些反对票,但我需要知道

如何在Symfony 4.2中保护生产模式的密码(敏感信息)

我想,当我编译
composer dump env prod
时,它将是安全的,对公众不可见,但如果我运行
phpinfo()我可以在纯文本中查看我的所有密码

DATABASE_URL
MAILER_URL
我是否应该像以前一样将它们存储在参数下的
services.yaml
中?
但是为什么我们甚至有
.env
文件呢


或者,只要没有人能够访问我服务器的CLI,我就不应该为此烦恼了?

我所知道的在生产环境中存储密码的最常见、最安全的方法是使用环境变量。在.env或应用程序repo中的其他文件中写入密码可能会通过提交到GitHub、代码共享等导致意外泄漏

.env文件是创建环境变量的一种简单方法,应该主要用于本地开发

在生产环境中,您可以在主机上手动创建环境变量和/或通过apache/nginx config、docker、kubernetes secrets等创建环境变量


公众不应该有权查看phpinfo()或您的环境变量。

我不这么认为,因为自symfony 3.2以来发生了很多变化。老实说,您可以对密码等进行加密,但您永远无法对其进行散列,因为很明显,您需要在某一点对其进行解密,例如,连接到数据库。如果攻击者能够访问您的
$\u服务器
变量或
phpinfo
中的数据,或者您正在打开一个巨大的安全漏洞,这应该是您首先关心的问题,或者攻击者已经获得了对机器本身的访问权,他/她将很容易了解如何解密这些漏洞。因此,在这两种情况下,您首先需要解决一个更大的问题。有用的资源:对于您的数据库,您真正想要的是数据库服务器只侦听来自前端服务器IP的内容,并且拥有一个不是“%”但具有IP限制的用户。对于您的邮件,根据可能的情况,您还希望尝试实现相同的目标
。不应提交扩展名为
local
的env
文件。例如,提交了
.env
,但忽略了
.env.local
.env.prod
已提交,但忽略了
.env.prod.local
。如果OP在prod中有他的
.env
,我会感到惊讶,特别是知道,默认情况下,Symfony的
DotEnv
组件是一个
require dev
composer依赖项,不会安装在生产中,除非您愿意将其移动到
require
或在prod中安装composer而不使用
--no dev
标志,这同样糟糕。我猜OP已经在使用环境或服务器变量,但仍然担心在
$\u server
phpinfo
中看到它们。但我可能错了。