Github - 记录一次对“不小心包含了密码的PR”的修复

news/2025/2/8 21:21:01/

Github - 记录一次对“不小心包含了密码的PR”的修复

前言

和好朋友一起开发一个字节跳动青训营抖音电商后端(now private)的项目,某大佬不小心把本地一密码commit上去并提了PR。

PR一旦发出则无法被删除,且其包含的commit也能被所有能看到这个仓库的人看到。虽然是本地一密码,泄露了也不是很严重,但最好还是隐藏一下这个信息。

思路

思路为:

  1. 强制重写本次PR的commits
  2. 删除评论、Action等所有可能带有“密码泄露sha”的记录
  3. 加强安全防范

其他人无法得知密码泄露的那次commit的sha,也就无法找到泄露的密码。

实操

强制重写本次PR的commits

其实PR中包含“密码commit”不用惊慌,重写包含密码commit的源分支,与协作者沟通并强制push即可。

但是由于误操等原因,PR被close并且源分支被删除了。于是思路变成了:恢复源分支 -> 重新打开PR -> 强制重写源分支

这里需要补充一丢丢Github PR的知识:

Pull Request(PR)通常是开发者想将一个分支(源分支)合并到另一个分支(目标分支)从而提交的更改请求。

a分支对b分支的PR在同一时间只能存在一个(关闭的PR除外),提出PR后合并之前任何对a分支的更改都将同步反映到PR上,直到PR被合并或关闭为止。

一个PR被强制关闭后,想要重新打开的前提是a分支依然存在并且还是提PR时候的a分支(另创分支并起名为a、被关闭PR中的commit强制重写过的a分支不算)。

问题是远端(Github)a分支被删除了,还没拉取到本地过,还能恢复这个a分支到PR关闭时的状态(或在此状态上新增了commit的状态)吗?当然可以,这就是Git:

git fetch origin pull/<PR编号>/head:<分支名>
git switch <分支名>

之后就可以push到远端,重新开启PR,本地回滚,隐匿密码,重新commit,强制push到远端,关闭PR并删除远端分支(可选)了。

git push --set-upstream origin <分支名>
gh pr reopen 30
git reset HEAD^
vim config.toml
git add xxx
git commit -s -m "xxx"
git push --force
gh pr close 30 -c "历史已重写"
git push origin --delete <分支名>

删除“密码泄露sha”的出现位置

虽然带有密码的commit被删除了,不会被合并到各个分支中了,变成了“游离”的commit。

但是其他人知道这个commit的sha的话,还是能够访问。

也许Github服务器上什么时候会在git gc的时候清除这个commit,但暂未寻找相关文档,是否会发生以及发生具体时间不详。

但是所幸,commit的message以及action的记录都是可以强制删除的,注意GitGuardian等即使修改了历史评论,但github上仍然可以看到历史评论,记得删除历史评论。

加强安全防范

最好的办法就是在本地仓库创建一个预提交的钩子,但是需要每个Collaborator自己在本地分别安装,最少也要执行一下git config --local core.hooksPath xxx钩子文件命令。

然后提交的时候最好不要git add .git add *之类的,最好一个一个看看。

其次就是使用一些密码泄露检测工具,放在文章结尾部分了。

好用的密码泄露检测工具可以一旦密码泄露立即报警,若不慎泄露则需要和其他成员沟通并强制push,必要的话可能需要更改密码。

End

推荐一个第三方秘密检测工具GitGuardian,检测功能强大,能根据代码语境检测。

自荐一个简单的密码检测BotLet Secret Monitor,支持自定义密钥信息,普通的commit在push后也会触发检测。

The Real End, Thanks!

原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/145469338


http://www.ppmy.cn/news/1570416.html

相关文章

自己做了个微信小游戏:推一个箱子

微信小程序搜&#xff1a;推一个箱子 里边目前有4个小游戏,喜欢的朋友帮忙点点&#xff0c;在此谢过 2个是我小时候玩文曲星上的经典小游戏 1.推箱子 2.猜数字 3.散光训练&#xff08;这个是刷短视频说能调节散光&#xff0c;不知道真的假的&#xff0c;然后就做了个工具&#…

Deepseek-v3 / Dify api接入飞书机器人go程序

准备工作 开通了接收消息权限的飞书机器人&#xff0c;例如我希望用户跟飞书机器人私聊&#xff0c;就需要开通这个权限&#xff1a;读取用户发给机器人的单聊消息 im:message.p2p_msg:readonly准备好飞书机器人的API key 和Secretdeepseek-v3的api keysecret&#xff1a;http…

Linux环境下的事件驱动力量:探索Libevent的高性能IO架构

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之《Linux环境下的事件驱动力量&#xff1a;探索Libevent的高性能I/O架构》&#xff0c;在这篇文章中&#xff0c;你将会学习到Libevent的高性能I/O****原理以及应用&#xff0c;并且我会给出…

800G光模块:引领未来数据中心与网络通信的新引擎

随着5G、云计算、人工智能和大数据技术的飞速发展&#xff0c;全球数据流量呈现爆发式增长。据预测&#xff0c;到2025年&#xff0c;全球数据总量将达到175ZB&#xff08;泽字节&#xff09;&#xff0c;这对网络带宽和传输效率提出了前所未有的挑战。在这一背景下&#xff0c…

【机器学习案列】基于XGBoost的睡眠时间预测

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

【电脑系统】电脑突然(蓝屏)卡死发出刺耳声音

文章目录 前言问题描述软件解决方案尝试硬件解决方案尝试参考文献 前言 在 更换硬盘 时遇到的问题&#xff0c;有时候只有卡死没有蓝屏 问题描述 更换硬盘后&#xff0c;电脑用一会就卡死&#xff0c;蓝屏&#xff0c;显示蓝屏代码 UNEXPECTED_STORE_EXCEPTION 软件解决方案…

基于 .NET 8.0 gRPC通讯架构设计讲解,客户端+服务端

目录 1.简要说明 2.服务端设计 2.1 服务端创建 2.2 服务端设计 2.3 服务端业务模块 3.客户端设计-控制台 4.客户端设计-Avalonia桌面程序 5.客户端设计-MAUI安卓端程序 1.简要说明 gRPC 一开始由 google 开发&#xff0c;是一款语言中立、平台中立、开源的远程过程调用…

用Python获取股票数据并实现未来收盘价的预测

获取数据 先用下面这段代码获取上证指数的历史数据&#xff0c;得到的csv文件数据&#xff0c;为后面训练模型用的 import akshare as ak import pandas as pd# 获取上证指数历史数据 df ak.stock_zh_index_daily(symbol"sh000001")# 将数据保存到本地CSV文件 df.…