Github上把敏感文件或者API秘钥上传公共库并开放为public权限导致秘钥泄露
背景
我们在开发项目时,可能会使用到一些加密文件,例如私钥,或者使用到一些云服务商提供的ak(Access Key Id)或者sk(Secret Access Key),使用这些时需要格外注意,不能泄露给别人,否则可能别人会恶意调用你的接口,例如短信,可能会导致短信欠费,但是,如果我们不小心上传到了自己的开源项目上,我们可以通过以下步骤,删除git提交记录,注意,一定要对仓库有所有权,有删除仓库权限,如果是上传到别人的项目,该方法不适用。
提示:一般上传到github仓库的项目,如果被检测到有阿里云或者腾讯云的ak或者sk,云服务商会发送消息通知,如果收到通知消息,需要尽快处理,也可以使用GitGuardian对github仓库进行扫描,也可以发现公开的ak或者sk。
步骤:撤销提交的敏感文件
- 首先需要将github上的仓库先设置为私有,防止其他人员可以访问到这个敏感文件,减少泄露程度。
-
克隆github仓库到本地
-
删除远程github仓库
-
BFG Repo-Cleaner是一款能够快速的清除错误的git历史记录的工具。
-
使用BFG Repo-Cleaner重写git提交历史
下面举例:假如目前错误提交了application.yml文件,该文件包含了一些敏感信息的配置,例如短信的配置, 需要删掉application.yml相关的提交记录
-
拷贝下载后的BFG Repo-Cleaner到和你项目平级的文件夹中
-
在项目中删除application.yml,并且commit,可以备注 "clean commit"
这一步可以不用做,但是我们为了对比前后效果,可以多提交一个移除文件的commit记录。
git commit -m "clean commit"
-
执行BFG
目前测试项目使用的就一个分支,不确定是否会影响仓库中的其他分支,小伙伴们可以自己可以使用单独项目先进行测试,测试是否会影响所有分支
java -jar bfg-1.14.0.jar 项目名/.git --delete-files "application.yml"
-
查看日志
git log -p
可以看到相关的git提交记录中的application.yml文件都会被删除
-
在github上重新创建新的仓库,将修改后的本地仓库和新的远程仓库关联,重新push所有文件和提交记录
-
检查泄露的相关API、秘钥的使用情况
登录相关服务提供商的后台,查看API 秘钥的使用情况,例如阿里云、腾讯云等,也可以使用GitGuardian扫描Github仓库,查看使用还存在秘钥泄露的情况。
原文链接:https://monkey.blog.xpyvip.top/archives/github-mi-yao-xie-lu