可搜索,可注册,可登录,致敬逗比大佬!尽在救援版逗比根据地 dbgjd.com
投稿文章 | 广告合作 | Telegram 群组 / 公告频道 / 使用教程

不小心把密码上传到GitHub了,怎么办

文章目录[显示]

这篇文章在 2017年12月05日10:06:12 更新了哦~

辛辛苦苦写了个脚本,一个兴奋就给推送到GitHub了,然后才反应过来脚本里好像硬编码了帐号密码;根据某某SDK写了个客户端,一下子推送上去发现API Key忘了抹;更有甚者直接把SSHKey推送上去了……

总之就是一不小心把敏感信息推到了版本控制的Git上,可能会马上反应过来,可能过了好几个月才反应过来,那该怎么办呢?本文就将讨论一下已经推送到GitHub之后几种比较可行的方式,希望大家伙都不会有必要读到此文,唉!(如果没推的话,amend啥的就好了)
恰如我在《糟糕的密码》中提到的一样,很多程序员、公司都会犯下类似的错误。啊喂,这可是我最自豪的博文,还不快去看看啊我说!

天啊我真是太喜欢这首歌了,快来听听吧~irony, ironical, ironic,为了防止正在上课的小伙伴被抓到,我把主题的自动播放干掉了哈哈哈~ 不小心把密码上传到GitHub了,怎么办

必须要做的后备措施

如果反应过来自己把敏感信息(尤其是帐号密码)推送到了GitHub上,尤其是很长时间之后才发现的,第一件要做的事情是更改掉对应的密码、尽可能的开启两步验证、作废API Key等必要的预备措施。因为我们无法得知究竟有多少人看过、克隆、复刻过仓库,也就无法评估危险等级,只能亡羊补牢了。

在说正确的方法之前,咱先说一说一个大错特错的方法

错误方法一:修改代码中的敏感信息

很多人第一想法可能会是修改代码中的敏感信息,然后commit & push。看似这样是解决了问题,但实际上问题依旧存在,这样做是大错特错的!为何?Git作为一个优秀的版本控制系统,其核心能力就是能够穿梭于每次历史记录(也就是commit),这样做实际上只是在最新的版本库中不存在敏感信息,只要咱checkout下自然就能看到有着敏感信息的那次commit,还有毛用嘛!
类似的办法还有revert啥的,没用的!
不小心把密码上传到GitHub了,怎么办

错误的方法二:置之不理

实际上这不算是一种方法,而是一种态度吧。如果你想成为一名优秀的程序员,那么注重细节、注重安全自然是比较珍贵的素质;同时我敢说大部分人都是一两个密码走天下、没有开启两步验证的,这样暴露密码极大地提高了撞库的机率,渗透的第一步搜集信息就得到了密码。
也许有人会反驳,谁没事干看我仓库读代码?或许真的没有人会无聊到这样,或许有了你也很难发现,但是请允许我介绍一种名为Gitrob的工具。人可能没那么无聊,但是机器可不怕无聊的工作,是吧。

下面咱来说说几个比较可行的方式吧!

方法一:删库

最简单的办法就是删库。确实简单粗暴,对于一些可有可无的仓库来说这应该是最好的处理方法了。对于那些比较珍贵的仓库,这个办法很显然是行不通的。

方法二:通过临时仓库覆盖敏感信息

思路很简单,备份仓库,在敏感信息之前的一次提交创建临时分支,删除有着敏感信息的分支,从临时分支创建新的默认分支,然后再push修改过的代码。如果使用GitHub,可能还需要把默认分支设置成临时分支。如果你使用的是比较方便的图形化Git客户端如Source Tree、GitKraken,那么这一步应该很容易,就不放图了……
这个方法只适用于发现的比较快的、敏感信息之后commit不太多的仓库。如果敏感信息之后commit & push了很多,这就不太方便了。

方法三:使用git filter-branch

git filter-branch的方法其实挺复杂的,而且不是那么方便,推荐大家还是用方法4吧,这个看看就够了。假如咱要从所有的历史记录中删除某个文件,其实就大概这么一句就差不多了

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch sensitive-data.py' --prune-empty --tag-name-filter cat -- --all 

这样那个文件的记录就没啦。咱再force push下,远程仓库的就和本地的一样啦。

git push origin --force –all 

当然了,如果有必要的话,记得不带敏感信息的代码再推上去。

方法四:使用专用工具BFG Repo-Cleaner

咱能看出来上面的命令听复杂,参数很多,于是就有个兄弟写了个工具来一键解决咱们的问题。主页在这,估计大家都能看懂吧?我再简述一下,假如我的仓库名字为python_test_code,敏感文件的名字为ygmail_test.py的话,

java -jar bfg.jar  --delete-files ygmail_test.py python_test_code 

大然后再看下,那么敏感文件就没了,然后再force push就行了~基本上不会有其他问题。

可是这样删除文件好像不太友好呢,有没有办法直接把敏感信息替换成其他内容啊?有啊!

先创建一个名为password.txt的文件,在其中一行一个输入你的敏感信息,比如说密码啦,邮箱啦,等等啦,然后运行这么一句((如果要清除的内容带中文,记得编码为UTF-8哟):

java -jar bfg.jar --replace-text password.txt python_test_code 
话说这作者,嗯……我很喜欢,我运行完竟然给我来了一句:

You can rewrite history in Git – don’t let Trump do it for real!
Trump’s administration has lied consistently, to make people give up on ever
being told the truth. Don’t give up: https://www.aclu.org/

当然了,bfg的还可以删除那些仓库历史里的大文件。比如说咱以前上传了几个二进制大文件,然后又删掉再也不需要了,如果clone的话,那么这几个大文件也会跟着一起clone下来的其实。

结语

俺才疏学浅,只能想到这么几种办法了,唉~!不要说我为啥要写这么一篇博文,泪啊!这事我都干了三次了,真是受不了自己的愚蠢了,也亲眼看着其他人干过……某个可爱的小童鞋,抽时间解决了这个安全问题吧。


文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://www.bennythink.com/git-password.html
喜欢 (9)

分享:-)

转载请注明:逗比根据地 » 不小心把密码上传到GitHub了,怎么办

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址