我使用Heroku部署Rails应用程序。我将敏感数据(如API密钥和密码)存储在Heroku的环境变量中,然后在使用各种API的rake任务中使用这些数据。
我只是想知道Heroku的环境变量是多么安全?有没有办法散列这些变量,同时保留在某种程度上在后台使用它们的能力?
我在这里遇到了一个前一个帖子:Is it secure to store passwords as environment variables (rather than as plain text) in config files?。
但是当我仍然需要使用无效密码来执行重要的后台任务时,它并没有完全覆盖实例。
答案 0 :(得分:2)
有些事情(主要是我的意见):
-
<强> 1。 API密钥!=密码
当你谈到API Keys
时,你谈论的是一个通常已经非常安全的公共令牌。如今API的本质是它们需要某种先前的身份验证(在应用程序或用户级别)以创建更强大的安全级别。
我首先要确保您在ENV
变量中存储的数据类型。如果是纯密码(对于电子邮件等),可以考虑将您的设置迁移到其中一个云提供商(SendGrid
/ Mandrill
等),允许您只使用API密钥
API密钥的优点在于它们可以在不影响基本帐户的情况下进行更改,并且可以限制与API约束的交互性。密码会影响基本帐户
-
<强> 2。 ENV Vars是操作系统级
它们是进程运行的操作环境的一部分。 例如,正在运行的进程可以查询TEMP的值 环境变量,以发现合适的存储位置 临时文件,或HOME或USERPROFILE变量来查找 运行该进程的用户拥有的目录结构。
您必须记住环境变量基本上意味着您将数据存储在您正在运行的environment
中。通常意味着“OS”,但如果需要,也可以是OS的虚拟实例。
底线是您的ENV vars存在于服务器的核心。与文本文件相同的方式将位于硬盘驱动器上的目录中 - 环境变量位于操作系统的核心
除非你收到服务器本身的黑客攻击,否则很难以编程方式获取ENV变量数据,至少在我的经验中如此。
答案 1 :(得分:1)
你在找什么?对谁或什么安全?
配置文件或ENV中存储的每条信息都可供有权访问服务器的每个人阅读。更重要的是,每个宝石都能够读取信息(并将其发送到某个地方)。
您无法加密信息,因为您需要将密钥存储在某处解密。同样的问题。
IMO环境变量和配置文件都是安全的,只要您信任可以访问您服务器的所有人,并且您仔细查看了与您的应用捆绑在一起的所有库和宝石的源代码。