- 原文地址:5 Best Practices To Prevent Git Leaks
- 原文做者:Coder’s Cat
- 译文出自:掘金翻译计划
- 本文永久连接:github.com/xitu/gold-m…
- 译者:YueYongDEV
- 校对者:Roc、icy
无数的开发人员正在使用 Git 进行版本控制,可是许多开发人员对 Git 的工做方式并无足够的了解。有些人甚至将 Git 和 Github 用做备份文件的工具。这些作法致使 Git 仓库中的信息遭到泄露,天天都有数千个新的 API 或加密密钥从 GitHub 泄漏出去。前端
我在信息安全领域工做了三年。大约在两年前,咱们公司发生了一块儿很是严重的安全问题,是因为 Git 仓库发生了信息泄露致使的。android
一名员工意外地在 Github 上泄露了 AWS 的密钥。攻击者使用此密钥从咱们的服务器下载不少敏感的数据。咱们花了不少时间来解决这个问题,咱们试图统计出泄漏了多少数据,并分析了受影响的系统和相关用户,最后替换了系统中全部泄漏的密钥。ios
这是一个任何公司和开发人员都不肯经历的悲惨故事。git
关于整件事情的细节我就很少写了。事实上,我但愿更多的人知道如何去避免 Git 的信息泄露。如下是我提出的一些建议。github
大多数新人开发者没有足够的安全意识。有些公司会培训新员工,但有些公司没有系统的培训。数据库
做为开发人员,咱们须要知道哪些数据可能会带来安全问题。千万记住,下面这些数据不要上传到 Git 仓库中:编程
若是你在公司工做,未经容许,请勿共享任何与公司相关的源代码或数据。后端
攻击者能够在 GitHub 上轻松地找到某些具备公司版权的代码,而这些代码都是被员工无心中泄露到 Github 上的。api
个人建议是,应该将公司项目和我的项目严格区分。安全
当咱们使用 Git 建立一个新项目时,咱们必须正确地设置一个 .gitignore 文件。.gitignore 是一个 Git 配置文件,它列出了不会被存入 Git 仓库的文件或目录。
这个 gitignore 项目 是一个实际使用着的 .gitignore 模板集合,其中包含对应各类编程语言、框架、工具或环境的配置文件。
咱们须要了解 gitignore 的模式匹配规则,并根据模板添加咱们本身的规则。
没有工具能够从 Git 仓库中找出全部敏感数据,可是有一些工具能够为咱们提供帮助。
git-secrets 和 talisman 是相似的工具,它们应做为预提交的钩子(pre-commit hooks)安装在本地代码库中。每次都会在提交以前对更改的内容进行检查,若是钩子检测到预期的提交内容可能包含敏感信息,那它们将会拒绝提交。
gitleaks 提供了另外一种在 git 仓库中查找未加密的密钥和其余一些不须要的数据类型的方法。咱们能够将其集成到自动化工做流程中,例如 CICD。
代码审查是团队合做的最佳实践。全部队友都将从彼此的源代码中学习。初级开发人员的代码应由具备更多经验的开发人员进行审查。
在代码检查阶段能够发现大多数不符合预期的更改。
启用分支限制 能够强制执行分支限制,以便只有部分用户才能推送到代码库中受保护的分支。Gitlab 也有相似的选择。
将 master 设置为受限制的分支有助于咱们执行代码审查的工做。
即便使用了上面提到的工具和方法,却仍然可能会发生错误。但若是咱们快速且正确地修复它,则代码泄漏可能就不会引发实际的安全问题。
若是咱们在 Git 仓库中发现了一些敏感数据泄漏,咱们就不能仅仅经过提交另外一个提交覆盖的方式来进行清理。
咱们须要作的是从整个 Git 历史记录中删除全部敏感数据。
在进行任何清理以前请记得进行备份,而后在确认一切正常后再删除备份文件。
使用 --mirror
参数克隆一个仓库;这是 Git 数据库的完整副本。
git clone --mirror git://example.com/need-clean-repo.git
复制代码
咱们须要执行 git filter-branch 命令来从全部分支中删除数据并提交历史记录。
下面举个例子,假设咱们要从 Git 中删除 ./config /passwd
:
$ git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch ./config/password' \
--prune-empty --tag-name-filter cat -- --all
复制代码
请记住将敏感文件添加到 .gitignore 中:
$ echo "./config/password" >> .gitignore
$ git add .gitignore
$ git commit -m "Add password to .gitignore"
复制代码
而后咱们将全部分支推送到远端:
$ git push --force --all
$ git push --force --tags
复制代码
告诉咱们的小伙伴进行变基(rebase):
$ git rebase
复制代码
BFG 是一种比 git filter-branch 更快、更简单的用于删除敏感数据的替代方法。一般比 git filter-branch 快 10–720 倍。除删除文件外,BFG 还能够用于替换文件中的机密信息。
BFG 保留最新的提交记录。它是用来防止咱们犯错误的。咱们应该显式地删除文件,提交删除,而后清除历史记录以此删除它。
若是泄漏的 Git 代码库被其余人 fork 了,咱们须要遵循 DMCA 的删除策略,请求 Github 删除建立的代码库。
整个过程须要一些时间才能完成,但这是删除全部副本的惟一方法。
不要犯无数人犯过的错误。尽力避免发生安全事故。
使用上面提到的这些工具和策略将有助于避免 Git 泄漏。
若是发现译文存在错误或其余须要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可得到相应奖励积分。文章开头的 本文永久连接 即为本文在 GitHub 上的 MarkDown 连接。
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。