【问题标题】:How to remove sensitive information before "git push"如何在“git push”之前删除敏感信息
【发布时间】:2019-10-22 12:59:08
【问题描述】:

我的 python 应用程序在源代码上有数据库键/api 键。 比如:

db_key    = XXXXXXXXXXXX
api_token = XXXXXXXXXXXX

...

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

【问题讨论】:

  • 将密钥放入配置文件并添加到.gitignore
  • 我想删除文件的特​​定“部分”,而不是整个文件...
  • 编辑后 - 添加了有关不删除整个文件的信息。
  • 尝试涂抹清洁过滤器。见stackoverflow.com/questions/22909620/…

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


【解决方案1】:

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

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

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

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

使用您身边的预提交挂钩可以自动进行更改,但这不是最好的主意。更改后git status 将始终向您显示工作区与索引不同。

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多