如何防止意外将密码发布到Git开源仓库

4
我正在独自开发一个开源项目,代码托管在GitHub上。
我希望完整的项目版本可以上传到GitHub上,但是想要使用一个假密码或API密钥来代替真实的,在本地副本中保留真实的密钥,以避免意外发布它。
如果我在配置文件上使用.gitignore,则不会上传,对吗?我想要上传,但不带有真实的密码或API密钥。
以后我可能想要添加更多内容到同一配置文件并上传新版本,但仍然使用虚假密码。
如何安全地完成这个过程?谢谢。

1
可能是如何处理项目配置文件最简单的方法?的重复问题。 - phd
我不确定这是相同的情况。与同事意外共享密码不同于在互联网上公开。也许有人能考虑到这一点给我建议。但我当然会研究答案。谢谢。 - aalku
1
你可能也有兴趣学习设置git钩子,这样每当你提交含有关键字的行时都会得到一个警告。例如防止提交含有“//password”或者“TODO”的行。 - pijemcolu
相关工具:ThoughtWorks的Talisman - jub0bs
1
另一个相关工具 https://github.com/awslabs/git-secrets - Shivankar
1个回答

1

使用环境变量

解决此问题的一种标准方法是从环境变量中加载机密信息。根据您在哪个操作系统上使用什么语言,这看起来可能是这样的:

Config.DBPASSWORD = ENV('dbpassword')

然后在任何一个环境中(dev或prod),您可以相应地设置必要的环境变量。在Linux上,这有点容易,但在Windows上也是可能的。

使用模板为每个环境使用配置

另一种常见的方法是,如果您在开发环境中存储了一个带有虚假/无用密码的配置(即本地数据库的无用密码,仅在localhost上运行且没有任何合理的数据),并且您存储了一个生产配置模板(例如config.production.php)。在部署时,您可以通过部署脚本将实际的生产密码写入模板中。同样,您可以安全地将所有文件检入版本控制。但请确保作为dev密码检入的密码对于任何有权访问的人都真正无用。例如,如果您在本地dev数据库中有生产数据(这是非常糟糕的做法!),即使数据库无法从localhost外部访问,也不应该在存储库中使用此密码。

如果您希望,还可以组合使用这些方法。


第一种选项适合我的情况。我想要保护的不是密码,而是公共API密钥,所以仅限于本地主机不是一个选择。我正在使用Java和Spring Boot,因此我认为我可以拥有一个虚假的密钥,并在启动时通过命令行覆盖它。 - aalku
@aalku 嗯,你也可以在开发中使用模板配置,将其重命名为实际配置(不要提交),并在设置开发环境时插入秘密。但是,环境变量可能更容易使用。 :) - Gabor Lengyel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接