是否安全密码保存为配置文件中的环境变量(而不是纯文本)?(Is it secure to store

2019-06-18 04:31发布

我在导轨,Django的(和PHP的一点点)一些应用程序的工作,和我开始在一些人做的事情之一是存储数据库和其他密码为环境变量,而不是在特定的配置文件明文(或在settings.py,对于django的应用程序)。

在与我的合作者之一讨论这个,他建议这是一个贫穷的做法 - 这或许并不如绝对安全,因为它可能一开始看起来。

所以,我想知道 - 这是一个安全的做法? 它是更安全的密码存储在这些文件(确保,当然,不要在公共回购或任何将这些文件)纯文本?

Answer 1:

在一个更理论水平,我倾向于认为有关通过以下方式安全级别(增加强度的顺序排列):

  • 没有安全。 纯文本。 任何人都知道在哪里看,可以访问数据。
  • 通过混淆安全。 您存储数据(明文)某处棘手,就像一个环境变量,或者,是为了看起来像一个配置文件的文件。 攻击者最终会弄清楚发生了什么事情,或在其绊倒。
  • 通过加密提供安全性是微不足道的突破,(认为凯撒密码!)。
  • 通过加密可以与一些努力被打破提供保障。
  • 通过加密提供的安全是不切实际的突破给当前的硬件。
  • 最安全的系统是一个任何人都无法使用! :)

环境变量是比纯文本文件安全,因为它们是挥发性/一次性的,不会被保存; 也就是说,如果你只设置一个本地的环境变量,如“设置PWD =什么”,然后运行该脚本,用的东西,在脚本结束退出命令shell,那么变量将不再存在。 你的情况属于前两者,我会说是相当不安全的。 如果你要做到这一点,我不会建议仅用于测试目的之外部署您的直接联网/家庭网络,然后。



Answer 2:

正如前面提到的,这两种方法不提供额外的“安全性”的任何一层,一旦系统被攻破。 我相信,有利于环境变量最强的原因之一是版本控制 :我见过太多的数据库配置等被accidentially存储在版本控制系统GIT一样每隔开发者看到(并高呼它发生在!我也是 ...)。

不存储你的密码文件中,使他们无法存储在版本控制系统。



Answer 3:

任何时候你有来存储密码,它是不安全的。 期。 有没有办法来存储未加密的密码安全。 现在的环境变量与配置文件中的哪一个更“安全”,或许是值得商榷的。 恕我直言,如果您的系统被攻破,它并没有真正的问题它存储在何处,一个勤奋的黑客可以追查。



Answer 4:

对不起,我没有足够的代表处发表评论,但我也想补充一点,如果你不小心,你的shell可能捕捉它的命令的历史,密码。 所以运行像$ pwd=mypassword my_prog手动并不像短暂的,你可能有希望。



Answer 5:

这取决于你的威胁模型。

你们是不是要防止用户密码洒各地,他们很可能被遗忘,把握不好自己的文件系统? 如果是这样,那么是的,因为环境变量是不是文件不太执着。

你们是不是要对安全的恶意的东西是直接针对你的程序? 如果是这样,那么没有,因为环境变量没有访问控制的相同级别的文件做。

就个人而言,我认为过失用户比对手的动机更常见,所以我会用环境变量的方法去。



文章来源: Is it secure to store passwords as environment variables (rather than as plain text) in config files?