开源项目:如何处理私有/秘密配置数据?

时间:2011-04-25 04:39:28

标签: security open-source github

我正在考虑在Github上为我的实时网站开源代码。到目前为止,我一直在将代码存储在私人仓库中,我唯一担心的是有一些与我的生产环境相关的配置文件(数据库密码,API密钥等)我不想成为公开可见。

在不暴露私人数据的情况下开放此类项目的典型方法是什么?你只是维护两个回购,一个公共的和一个相同的私人数据,添加私人数据,偶尔合并两者之间?

2 个答案:

答案 0 :(得分:8)

对于Git,我建议您向.gitignore添加规则,以忽略包含敏感信息的文件(Mercurial为.hgignore)。尽量将敏感信息保存在一个地方(例如设置文件)。如果你使用Web框架,这个信息通常在一个文件中(例如,在Django中,有一个带有DB信息,密钥等的settings.py文件)如果你的应用程序的各个部分都有根深蒂固的敏感信息,将信息分解成某种配置文件或对象。

如果您希望人们仍然知道数据的来源,请在虚拟数据中包含一个示例或虚拟文件,并在某处(在文件或自述文件中)表示文件必须更改。然后,您可以为该文件命名,例如settings.py.example并忽略真实的settings.py

保留多个回购是个坏主意。只需省略敏感数据,并确保明显忽略了 缺少,以便人们仍然可以重复使用您的工作。

答案 1 :(得分:0)

从逻辑上讲,如果不透露您的敏感信息,您只能做两件事:

  1. 根本不将信息放入公共VCS。
  2. 以加密安全的方式将信息放入VCS。
  3. 我个人不想复制存储库,如果你需要直接从VCS部署,那么你几乎只剩下选项2.显然它将取决于你的框架,但在.NET中,例如,我' d确保你的连接字符串和API密钥存储在web.config中然后它被正确加密(我在OWASP Top 10 for .NET developers part 6: Security Misconfiguration的“加密敏感配置数据”部分中讨论这个。)

    使用这种方法,您将所需的信息放入配置文件中,以便它可以在发生加密但不在其他地方的计算机上成功执行。尝试在另一台计算机上运行该应用程序,由于密钥不同,将抛出异常。