我在导轨,Django的(和PHP的一点点)一些应用程序的工作,和我开始在一些人做的事情之一是存储数据库和其他密码为环境变量,而不是在特定的配置文件明文(或在settings.py,对于django的应用程序)。
在与我的合作者之一讨论这个,他建议这是一个贫穷的做法 - 这或许并不如绝对安全,因为它可能一开始看起来。
所以,我想知道 - 这是一个安全的做法? 它是更安全的密码存储在这些文件(确保,当然,不要在公共回购或任何将这些文件)纯文本?
我在导轨,Django的(和PHP的一点点)一些应用程序的工作,和我开始在一些人做的事情之一是存储数据库和其他密码为环境变量,而不是在特定的配置文件明文(或在settings.py,对于django的应用程序)。
在与我的合作者之一讨论这个,他建议这是一个贫穷的做法 - 这或许并不如绝对安全,因为它可能一开始看起来。
所以,我想知道 - 这是一个安全的做法? 它是更安全的密码存储在这些文件(确保,当然,不要在公共回购或任何将这些文件)纯文本?
在一个更理论水平,我倾向于认为有关通过以下方式安全级别(增加强度的顺序排列):
环境变量是比纯文本文件更安全,因为它们是挥发性/一次性的,不会被保存; 也就是说,如果你只设置一个本地的环境变量,如“设置PWD =什么”,然后运行该脚本,用的东西,在脚本结束退出命令shell,那么变量将不再存在。 你的情况属于前两者,我会说是相当不安全的。 如果你要做到这一点,我不会建议仅用于测试目的之外部署您的直接联网/家庭网络,然后。
正如前面提到的,这两种方法不提供额外的“安全性”的任何一层,一旦系统被攻破。 我相信,有利于环境变量最强的原因之一是版本控制 :我见过太多的数据库配置等被accidentially存储在版本控制系统GIT一样每隔开发者看到(并高呼它发生在!我也是 ...)。
不存储你的密码文件中,使他们无法存储在版本控制系统。
任何时候你有来存储密码,它是不安全的。 期。 有没有办法来存储未加密的密码安全。 现在的环境变量与配置文件中的哪一个更“安全”,或许是值得商榷的。 恕我直言,如果您的系统被攻破,它并没有真正的问题它存储在何处,一个勤奋的黑客可以追查。
对不起,我没有足够的代表处发表评论,但我也想补充一点,如果你不小心,你的shell可能捕捉它的命令的历史,密码。 所以运行像$ pwd=mypassword my_prog
手动并不像短暂的,你可能有希望。
这取决于你的威胁模型。
你们是不是要防止用户密码洒各地,他们很可能被遗忘,把握不好自己的文件系统? 如果是这样,那么是的,因为环境变量是不是文件不太执着。
你们是不是要对安全的恶意的东西是直接针对你的程序? 如果是这样,那么没有,因为环境变量没有访问控制的相同级别的文件做。
就个人而言,我认为过失用户比对手的动机更常见,所以我会用环境变量的方法去。