Ruby on rails 是Heroku';s环境变量是存储敏感数据的安全方式吗?

Ruby on rails 是Heroku';s环境变量是存储敏感数据的安全方式吗?,ruby-on-rails,ruby,heroku,Ruby On Rails,Ruby,Heroku,我使用Heroku部署Rails应用程序。我将API密钥和密码等敏感数据存储在Heroku的环境变量中,然后在使用各种API的rake任务中使用这些数据 我只是想知道Heroku的环境变量有多安全?有没有一种方法可以散列这些变量,同时保留在后台以某种方式使用它们的能力 我在这里遇到了以前的一个线程: 但它并没有涵盖我仍然需要取消密码以执行重要后台任务的情况。有几件事(主要是我的意见): -- 1。API密钥!=密码 当您谈论API密钥时,您谈论的是一个公共令牌,它通常已经非常安全。如今,API的

我使用Heroku部署Rails应用程序。我将API密钥和密码等敏感数据存储在Heroku的环境变量中,然后在使用各种API的rake任务中使用这些数据

我只是想知道Heroku的环境变量有多安全?有没有一种方法可以散列这些变量,同时保留在后台以某种方式使用它们的能力

我在这里遇到了以前的一个线程:

但它并没有涵盖我仍然需要取消密码以执行重要后台任务的情况。

有几件事(主要是我的意见):

--

1。API密钥!=密码

当您谈论API密钥时,您谈论的是一个公共令牌,它通常已经非常安全。如今,API的本质是它们需要某种事先身份验证(在应用程序或用户级别)来创建更健壮的安全级别

我首先要确保在
ENV
变量中存储的数据类型。如果是纯密码(对于电子邮件等),可能考虑将您的安装迁移到云提供商之一(<代码> sEdGrase<代码> >代码> MangoS/代码>等),允许您只使用API密钥

API键的美妙之处在于,它们可以在不影响基本帐户的同时进行更改,并将交互限制在API的约束范围内。密码会影响基本帐户

--

2。是操作系统级别

它们是流程运行的操作环境的一部分。 例如,一个正在运行的进程可以查询TEMP的值 环境变量以发现要存储的合适位置 临时文件,或HOME或USERPROFILE变量来查找 运行进程的用户拥有的目录结构

您必须记住,环境变量基本上意味着您将数据存储在正在操作的
环境中。通常表示“操作系统”,但如果需要,也可以是操作系统的虚拟实例

底线是您的环境变量存在于服务器的核心中。与文本文件位于硬盘上的目录中的方式相同——环境变量位于操作系统的核心


除非您收到对服务器本身的攻击,否则从语法上获取ENV变量数据将非常困难,至少在我的经验中是这样

你在找什么?针对谁或什么的安全

配置文件或ENV中存储的每一条信息对每个有权访问服务器的人都是可读的。更重要的是,每个gem都可以读取信息并将其发送到某个地方

您不能对信息进行加密,因为这样您需要将密钥存储在某个地方进行解密。同样的问题


IMO—环境变量和配置文件—都是安全的,只要您可以信任所有可以访问您的服务器的人,并且您仔细查看了与应用程序捆绑的所有库和gem的源代码。

基本上,我希望保护ENV,防止任何人访问服务器。好吧,bcrypt似乎是保护重要信息的最佳方式,但散列似乎是不可逆的,因此无法在使其随时可用于后台任务的同时对其进行散列。对,每个有权访问服务器的人都可以启动Rails控制台、查看数据库或读取每个环境变量。当您认为某些不需要的用户访问了您的服务器时,唯一的选择是:安装一个全新的服务器,并更改所有api密钥、密码和其他凭据。嗨,Rick,谢谢您的回复。我担心的是服务器可能被黑客攻击,暴露ENV中的关键数据。到目前为止,我正在存储来自Mashape的API密钥以及来自Google API的私钥和电子邮件地址。我还存储来自需要用户名和密码的API的凭据(我想这是设计得很糟糕的)。不过,我不确定在ENV中存储私钥是否是一个好主意。