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

How to remove sensitive information before "git push"

我的 python 应用程序在源代码上有数据库 keys/api 键。 类似于:

db_key    = XXXXXXXXXXXX
api_token = XXXXXXXXXXXX

...

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

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

如果您不想将它作为一个单独的文件使用,那么您将需要每次手动删除它或编写一个脚本来执行它(开销并且会很痛苦,具体取决于文件)。

出于安全原因,您应该更改这两个令牌,因为很容易从您的 git 历史记录中获取它们,更改它们会减少一个问题,即修复 git 历史记录你的代币。

在源代码中存储 credentials/sensitive 信息是一种不好的做法。可以通过将它们存储在外部位置来避免这种情况。根据 requirements/security 级别,外部位置可能是:

  • 环境变量
  • 配置文件未存储在版本控制中
  • 数据库
  • 像 Hashicorp 的 Vault 这样的专用系统

关于问题的另一部分 – 删除已推送的凭据。首先禁用泄露的凭据(有机器人在寻找它们,来自 Github 和恶意用户)。

禁用凭据后,您需要重写历史记录。这可以用 git rebase 来完成。请注意,重写 public 历史被认为是一种不好的做法,应该避免。我宁愿禁用凭据并添加添加答案第一部分中描述的修改的提交。

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

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