如何在“ git push”之前删除敏感信息

时间:2019-06-07 02:18:22

标签: git push commit git-commit git-push

我的python应用程序在源代码上具有数据库密钥/ api密钥。 像这样:

db_key    = XXXXXXXXXXXX
api_token = XXXXXXXXXXXX

...

在提交/推送到git之前,我想自动删除此键(而不是整个文件)。 另外,我想从以前的提交中删除它(已经推送到github)。 有什么解决办法吗?

2 个答案:

答案 0 :(得分:0)

这里最好的解决方案是将密钥放在一个单独的文件中,然后您要做的就是创建一个.gitignore并将该文件放在那里。现在,您可以通过读取此文件来获取密钥。

如果您不想将其用作单独的文件,则每次都需要手动将其删除,或者编写一个脚本来执行此操作(开销很大,具体取决于文件)。

出于安全原因,您应该同时更改两个令牌,因为很容易从git历史记录中获取它们,更改它们将使您少遇到一个问题,即修复包含您的令牌的git历史记录。

答案 1 :(得分:0)

在源代码中存储凭据/敏感信息是一种不良做法。可以通过将它们存储在外部位置来避免这种情况。根据要求/安全级别,外部位置可能是:

  • 环境变量
  • 配置文件未存储在版本控制中
  • 数据库
  • 专用系统,例如Hashicorp的保险柜

关于问题的另一部分–删除已经推送的凭据。首先禁用泄漏的凭据(有一些机器人从Github和恶意用户那里寻找它们)。

禁用凭据后,您需要重写历史记录。这可以通过git rebase完成。请注意,重写公共历史记录被视为不良做法,应避免这样做。我宁愿禁用凭据并添加提交以添加答案第一部分中所述的修改。

可以使用侧面的pre-commit钩子自动进行更改,但这不是最好的主意。进行更改后,git status将始终向您显示工作空间与索引不同。

其他选择是使用过滤器,但这听起来像是对我的过度设计。使用此方法,您可以解决问题,但不能解决根本原因(将凭据存储在源代码中的纯文本中)。