当前位置: 首页 > 面试题库 >

将密码作为环境变量(而不是纯文本)存储在配置文件中是否安全?

裴令秋
2023-03-14
问题内容

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

在与我的一位合作者讨论此问题时,他建议这是一种不良做法-也许这并不像最初看起来那样安全。

所以,我想知道-这是安全的做法吗?将密码以纯文本格式存储在这些文件中是否更安全(当然,请确保不要将这些文件保留在公共存储库中或其他内容中)?


问题答案:

从理论上讲,我倾向于以以下方式(按照强度递增的顺序)考虑安全级别:

  • 没有安全感。纯文本。任何知道在哪里查看的人都可以访问数据。
  • 通过混淆来保证安全。你将数据(明文)存储在某个位置比较麻烦,例如环境变量,或者存储在看起来像配置文件的文件中。攻击者最终将发现正在发生的事情,或者偶然发现了发生的事情。
  • 加密提供的安全性可以轻易破解(请考虑使用凯撒密码!)。
  • 加密提供的安全性可能会被破坏。
  • 加密提供的安全性对于破坏给定的当前硬件不切实际。
  • 最安全的系统是没人能使用的系统!:)
    环境变量比纯文本文件更安全,因为它们是易失性/一次性的,不保存。例如,如果仅设置一个本地环境变量(例如“ set pwd = whatever”),然后运行脚本,并且脚本末尾退出命令外壳,则该变量将不再存在。你的案件属于前两个案件,我想这是相当不安全的。如果要执行此操作,我建议你不要在直接的Intranet /家庭网络之外进行部署,而仅出于测试目的。


 类似资料:
  • 问题内容: 根据问题,将密码存储在php页面上是否安全,例如 如果用户看不到它,那是安全的,对吗? 编辑:有人实际上建议使用哈希,但是,数据库服务器连接密码会出现问题,不是吗? 问题答案: 简短的答案是“否”,并且取决于情况。 这是几乎从来没有一个好主意,以纯文本格式存储密码,尤其是在网络访问的位置,如果 没有 其他原因,而不是一个简单的服务器配置不当或回波在错误的地方可以将其暴露给世界。 如果必

  • 我使用Thymeleaf处理html模板,我了解如何从控制器中附加内联字符串,但现在我想在页面中附加一段html代码。 例如,让我们留在我的java应用程序中: 我需要在html页面中写些什么,以便用“n”变量替换它,并作为html代码处理,而不是将其编码为文本?

  • 问题内容: 令我感到困扰的是,许多PHP程序要求用户将mysql密码以纯文本(字符串或常量)存储在应用程序根目录下的配置文件中。 这些年来,有没有更好的方法呢? 到目前为止,我提出了两个最小的安全性增强措施: 使用.htaccess中的规则通过网络使文件不可读(以防php失败或存在读取php源代码的安全漏洞) 在建立(未设置)数据库连接之后销毁内存中的密码(以防止由于安全漏洞,注入等导致的字符串转

  • 我知道在java源代码中以字符串形式存储密码是不安全的。通常,最好将其存储在具有char[]类型的变量中。以以下形式存储密码安全吗? 字符串“my password”是否出现在编译的java类文件中?在我看来,在编译源代码之后,“我的密码”不会出现在我的类文件中。但我仍然不能100%确定我可以使用描述的表示来存储密码。 我能否安全地使用这个结构,并确保密码受到保护,除非有人从源代码中获取密码? 编

  • 我需要将API密钥和其他敏感信息存储在中,作为在GAE上部署的环境变量。这样做的问题是,如果我将推送到GitHub,这些信息将变得公开(不好)。我不想将信息存储在数据存储中,因为它不适合项目。相反,我想在应用程序的每个部署上从中列出的文件中交换值。 这是我的应用程序。yaml文件: 有什么想法吗?

  • 问题内容: 我在Docker容器中设置了Jenkins,并且尝试通过该服务器访问我的私有Bitbucket存储库。我需要将SSH密钥复制到该容器中,以便Bitbucket能够识别它,然后让Jenkins服务器访问该存储库。 我的docker-compose.yml文件中包含以下内容: 但是,从字面上给出而不是存储在内部的值。我听说在Dockerfile中执行此操作的问题是它仍然可以在将要推送的映像