Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止意外地将密码发布到git开源存储库_Git_Security - Fatal编程技术网

如何防止意外地将密码发布到git开源存储库

如何防止意外地将密码发布到git开源存储库,git,security,Git,Security,我正在自己开发一个开源项目,并在GitHub上托管代码 我希望有一个完整的版本在那里,但有一个假密码或API密钥有一个好的在我的本地副本没有风险的意外发布它 如果我在配置文件上使用.gitignore,它将不会上载,对吗?我想上传,但没有我的真实密码或API密钥 稍后,我可能想在同一个配置文件中添加更多内容,并上传一个新版本,但再次使用假密码 我怎样才能安全地做这件事?谢谢。使用环境变量 这个问题的一个标准解决方案是从环境变量加载秘密。这取决于您在什么操作系统上使用什么语言,看起来有点像 Con

我正在自己开发一个开源项目,并在GitHub上托管代码

我希望有一个完整的版本在那里,但有一个假密码或API密钥有一个好的在我的本地副本没有风险的意外发布它

如果我在配置文件上使用.gitignore,它将不会上载,对吗?我想上传,但没有我的真实密码或API密钥

稍后,我可能想在同一个配置文件中添加更多内容,并上传一个新版本,但再次使用假密码

我怎样才能安全地做这件事?谢谢。

使用环境变量 这个问题的一个标准解决方案是从环境变量加载秘密。这取决于您在什么操作系统上使用什么语言,看起来有点像

Config.DBPASSWORD = ENV('dbpassword')
然后在您的任何环境(dev或prod)中,相应地设置必要的环境变量。在Linux上,这稍微容易一些,但在Windows上也是可能的

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


如果需要,您也可以将这些方法组合起来。

我不确定是不是相同的场景。与同事意外共享密码与在互联网上公开密码不同。也许有人会给我一个建议。当然,我会研究答案的。非常感谢。您可能还对设置git钩子感兴趣,这样每当您输入包含键的行时,都会收到警告。正如在前面的演示中,包含“//password”或“TODO”相关工具的行:。另一个相关工具的第一个选项适用于我的场景。这不是一个密码,而是一个公共API密钥,我现在想保护它,所以仅用于localhost不是一个选项。我在Spring Boot中使用Java,所以我想我可以在启动时在命令行中使用一个伪键并覆盖它。@aalku好的,您也可以使用dev的模板配置,您可以将其重命名为实际配置(未签入),并在设置dev环境时插入机密。但是,是的,环境变量可能更容易