我在rails、django(和一点php)中开发了一些应用程序,我在其中一些应用程序中开始做的一件事是将数据库和其他密码存储为环境变量,而不是将纯文本存储在某些配置文件中(或在settings.py中,对于django应用程序).

在与我的一位合作者讨论这一点时,他建议这是一种糟糕的做法——也许这并不像一开始看起来那样完全安全.

所以,我想知道——这是一种安全的做法吗?在这些文件中以明文形式存储密码是否更安全(当然,要确保不要将这些文件留在公共回购协议或其他任何文件中)?

推荐答案

在更理论的层面上,我倾向于以以下方式思考安全级别(以增加强度的顺序):

  • 没有安全措施.纯文本.任何知道go 哪里找的人都可以访问数据.
  • 通过模糊处理实现安全.您可以将数据(明文)存储在一些棘手的地方,比如环境变量,或者存储在一个看起来像配置文件的文件中.攻击者最终会弄清楚到底发生了什么,或者偶然发现.
  • 加密提供的安全性很容易 destruct (想想凯撒密码吧!).
  • 通过加密提供的安全性可以通过一些努力来 destruct .
  • 由加密提供的安全性,在给定的当前硬件条件下不可能 destruct .
  • 没有人能使用最安全的系统

环境变量比明文文件安全more,因为它们是易失性/一次性的,不保存;

Ruby-on-rails相关问答推荐

Rails 7涡轮框架和多种形式与形式值有关

HTTP:MimeNegotiation::InvalidType(html不是有效的MIME类型):""

方法和括号之间没有空格时出错

Rails文档的悲观锁定示例中的争用条件

Rails 7.1,登录到STDOUT和LOG/Production.log

ActiveAdmin:的呈现索引表在父级的显示页中有许多资源

Ruby Hash 中 tap / delete 和 except 的区别

在单个继承表和另一个表中的类之间建立多对多关联

验证模型属性大于另一个

Rails 3 的data-method='delete'如何优雅地降级?

向现有控制器添加操作(Ruby on Rails)

如果 URL 不存在,请将 http(s) 添加到 URL?

使用 Ruby on Rails 从原始 IP 地址获取用户国家名称

从控制器中删除 Cookie

Rails 4 pgsql add_index 类型为 GIN 或 GiST

如何在 rake 任务中强制 RAILS_ENV?

默认情况下 haml

在 Rails 中显示主机名和数据库名

Rails:您已经激活了 rake 10.3.1,但您的 Gemfile 需要 rake 10.2.2 (Gem::LoadError)

为什么 rails bootstrap 这么慢,我该怎么办?