如何从Git存储库中删除敏感文件

对文件建立索引,写入提交消息,将数据发送到服务器……突然间,您想倒转时钟。提交包含不应存在的文件。发生这种情况时,就该去搜索引擎了。



每个开发人员都会一次将包含机密信息的文件错误地提交到公共存储库。如何处理这样的问题?如何确保不再发生这种情况?



在本文中,我将告诉您如果文件意外进入到存储库而根本没有任何处理的情况该怎么办。在这里,我将提供Git命令,使您可以更正历史记录,并分享一些建议,以使用机密信息来组织安全工作。





从Git存储库中删除敏感文件(大图



最小化损坏



因此,您不小心提交了包含机密信息的文件。我们称这个文件.env发生这种情况后,您需要立即问自己几个问题:



  • 提交是否已推送到远程存储库?
  • 远程存储库是否可以公开访问?


▍提交尚未发送到远程存储库



如果尚未将提交提交到存储库,则通常情况下不会出现任何威胁。为了修复所有问题,您只需要返回上一个提交:



git reset HEAD^ --soft


这些文件将保留在存储库的工作副本中,您可以对项目进行必要的更改。



如果要保留提交,而只需要从中删除某些文件,请执行以下操作:



git rm .env --cached
git commit --amend


此参数--amend只能用于最近的提交。如果在提交失败后又添加了一些,请使用以下命令:



git rebase -i HEAD~{    ?}


这将修复错误的提交,并且将帮助您避免丢失其他提交对项目所做的更改。



▍提交已发送到远程存储库



如果您已经将提交推送到远程存储库,那么首先,您需要了解公共存储库和私有存储库之间的区别。



如果您的存储库是私有的,并且无法被机器人或您不信任的人访问,则可以使用上面的两个命令来调整上一次提交。



如果在有问题的提交之后将其他提交推送到存储库,则不会阻止您使用git filter-branch命令BFG Repo-Cleaner工具从Git历史记录中删除敏感文件



这是一个用法示例git filter-branch



git filter-branch --force --index-filter "git rm --cached --ignore-unmatch .env" --prune-empty --tag-name-filter cat -- --all


但是在执行此操作时,请记住对存储库进行此类更改的两个重要方面:



  • Git. , - , , PR, . .
  • . , , . , , , , . , ID, , .


如果当前密钥在公共存储库中,我是否需要创建新密钥?



如果您简短地回答标题中的问题,则-有必要。如果您的存储库是公开可用的,或者由于某种原因您认为它不是存储敏感数据的地方,那么您将需要考虑进入该存储库的机密数据是否被泄露。



即使从存储库中删除了这些数据,您也无法使用漫游器和存储库派生进行任何操作。如何进行?



  • 停用所有按键或密码。这必须首先完成。停用密钥后,公开的机密信息将变得无用。
  • 自定义文件.gitignore接收.gitignore具有对Git敏感信息的文件记录不会监视那些文件的状态。
  • 准备一个不包含敏感文件的提交。
  • 将更改提交到存储库,为提交提供有关情况的说明。不要试图隐藏错误。包括您在内的所有从事该项目的程序员都将赞赏提交在存储库中的存在,并提供情况说明和此提交确切修复的内容的描述。


在使用Git进行版本控制的项目中保留机密文件的最佳做法



为了防止泄露机密信息,您应遵守以下建议。



sensitive将敏感数据存储在.env文件(或其他类似文件)中



将API密钥和类似信息保存在一个文件中.env使用这种方法,如果Git不跟踪文件的状态.env,通过向该文件添加新密钥,您将不会意外地将其推入存储库。



这种方法的另一个优点是,您可以通过全局变量访问所有键process



if尽可能使用API​​密钥



受损的API密钥易于停用和重新创建。如果可能,请使用它们,而不要使用登录名和密码。



using使用您的构建工具存储API密钥



构建应用程序时通常需要API密钥。像Netlify这样的构建工具可让您将密钥保存在安全的保管库中。此类密钥会使用全局变量自动注入到应用程序中process





环境变量管理



。将.env文件条目添加到.gitignore文件



确保Git不会跟踪包含敏感信息的文件。



▍准备模板.env.template文件



有了这样的模板文件,可以帮助那些从事项目工作的人员将API密钥添加到项目中,从而无需阅读文档。



▍请勿更改远程存储库中的Git历史记录



尝试严格遵守此规则。如果您遵循上述指南,则无需更改Git历史记录。



结果



希望我的资料能帮助您安全地处理机密数据。



您是否曾经向公共存储库提交过不应提交的内容?










All Articles