在GitHub上公开秘密:泄露凭证和API密钥后该怎么办

2024-01-05 07:50

本文主要是介绍在GitHub上公开秘密:泄露凭证和API密钥后该怎么办,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作为开发人员,如果发现刚刚将敏感文件或机密公开给公共git存储库,则需要执行一些非常重要的步骤。

什么是秘密? 在本文档中,当我们使用“机密”一词时,我们指的是用于身份验证或授权的任何内容,最常见的是API密钥,数据库凭据或安全证书。

第一步,呼吸:在大多数情况下,如果您认真遵循本指南,则只需几分钟即可消除大部分潜在损害。 这篇文章将介绍消除风险并确保将来不会发生这种风险所需的四个步骤。

  1. 撤销机密或凭据
  2. (可选)永久删除泄漏的所有证据
  3. 检查入侵者的访问日志
  4. 实施未来的工具和最佳实践

如果删除文件或存储库,那么我安全吗?

抱歉不行。 如果将存储库设为私有或删除文件,则可以降低新发现有人泄漏的风险,但现实情况是,对于那些知道在哪里查找的人来说,您的文件很可能仍然存在。 Git会保留您所做的所有操作的历史记录,因此即使删除该文件,该文件仍将存在于git历史记录中。 即使将存储库设为私有,删除您的历史记录或什至删除整个存储库,您的秘密仍然会受到威胁。

有很容易的方法来监视公共git存储库,例如,GitHub有一个公共API,您可以在其中监视每个进行的git提交。 这意味着任何人都可以(并且确实可以)监视此API,以在存储库中查找凭据和敏感信息。 出于这个原因,最好假设如果您泄露了一个秘密,它将永远被泄露。

将机密泄漏到GitHub上然后将其删除,就像不小心发布了一个令人尴尬的推文,将其删除,只是希望没人能看到它或截屏。

步骤1.撤销秘密并消除风险

我们需要做的第一件事是确保您公开的秘密不再有效,因此没有人可以利用它。

如果您需要有关如何撤消密钥的具体建议,请参阅我们的API最佳做法中的说明 。

如果此密钥属于您工作的组织,那么与组织的高级开发人员进行交流非常重要。 让您的公司知道您泄露了敏感信息可能会很可怕,尤其是如果这些信息发生在个人存储库中。 但是诚实是最好的方法,公司很可能已经发现了漏洞,如果问题得到解决并且您真诚地关心,则可以原谅错误。

不要希望问题会消失-错误会发生,最好是诚实坦率。

你知道吗?

松弛键是稀有的API令牌之一,它们能够自动撤消! 就像使用auth.revoke端点一样简单!

第2步。(可选)摆脱证据

一旦秘密被撤消,就不能再使用了。 但是,拥有任何凭证,甚至是过期的凭证,可能看起来都不专业,并引起关注。 此外,还有一些无法撤销的秘密(例如数据库记录),或者没有人可以保证的凭证被正确地撤销(例如,可以在许多不同地方使用的SSH密钥)。 因此,我们将逐步介绍如何删除其历史记录,请注意,这不是一项琐碎的任务,建议您寻求高级开发人员的指导。

一个。 删除您的存储库或将其设为私有

通常,先花点时间买个好主意:导航到GitHub存储库,然后单击“ 设置 ”。

然后,一直到“危险区域”,然后单击“ 设为私有 ”以对公众隐藏存储库。

注意:如果您希望进行备份,请单击“删除此存储库”。 您稍后将其推回。

您可以稍后将存储库推回。

b。 重写git历史

Warning️警告在进入之前,应注意重写.git历史记录不是一件容易的事,尤其是在有很多开发人员为您的存储库做贡献的情况下。 您将不得不完全删除存储库,然后将清理后的版本推回,或者git push --force到您的初始存储库。 在这两种情况下,您都将完全中断其他贡献者的工作流程。

我们将使用著名的BFG Repo-Cleaner 。

BFG是git-filter-branch的更简单,更快(10-720x更快)的替代品,用于清除Git存储库中的不良数据

假设您提交了一个敏感文件config.py ,其中包含一个秘密密钥。

一世。 确保已安装Java。

ii。 克隆您的存储库

git clone https: //github.com/YOUR-USER-NAME/YOUR-REPOSITORY.git

iii。 删除敏感文件

当前分支上的最新提交受BFG保护,因此您必须确保它是干净的。 删除“ config.py”并提交更改

与当前分支不同的分支不受保护,因此,如果在其他分支上可以找到“ config.py”,BFG将清除该分支。

git commit -m "clean commit"

iv。 运行BFG

从他们的网站下载最新版本的BFG,将Java文件移到您的存储库中并运行以下命令

注意:将bfg-VERSION替换为最新版本(bfg-1.13.0)

java -jar bfg-VERSION .jar YOUR-REPOSITORY/ .git --delete-files "config.py"

vi。 查看您的历史记录

您可以使用log-p命令显示每次提交中引入的差异(称为“补丁”)。 如果浏览不同的分支,应该会看到一切都很好。

git log - p 

七。 向后推存储库

创建一个新的存储库并将其推回。 确保每个人都删除了旧克隆并正在使用您的新版本。

你知道吗?

即使git通过拒绝非快进推送请求阻止您覆盖中央存储库的历史记录,您仍然可以使用--force标志来推送更改。 这将迫使您的远程分支与您的本地分支相匹配。 但是请小心,这是一个危险的命令!

3.检查您的访问日志!

这非常重要,具体取决于泄漏的密钥。 有时,一个访问密钥泄漏会产生多米诺骨牌效应,并导致暴露新的机密。 例如,对Slack的访问密钥可能会给演员带来不好的访问权限,使他们无法访问包含新凭据和访问代码的消息,因此对于确保没有可疑数据非常重要!

检查访问日志确实取决于泄漏的凭据的类型。 例如,AWS日志有时会集中到Cloudwatch中。 Slack具有专用的API端点,该端点允许访问审核日志。 这可能是您与SRE或Application Security团队保持紧密联系以确保一切正常的好时机!

现在怎么办?

因此,该凭证已被撤消,存储库历史记录已被清除。 我现在该怎么办? 现在您已经感到恐惧,现在是开始实施一些良好做法的好时机。

1.获得GitGuardian的保护

GitGuardian是一个好人服务,可实时扫描公共存储库中的每个GitHub提交以查找泄漏。

注册GitGuardian

2.查看API最佳做法

为了将来更好地保护您的秘密,我们建议您阅读我们的API最佳做法指南 。 它提供了许多有用的提示,以确保您将来不会意外泄露机密。

作者注意:这篇文章最初写在 GitGuardian的博客上

From: https://hackernoon.com/exposing-secrets-on-github-what-to-do-after-leaking-credentials-and-api-keys-58dy3yqp

这篇关于在GitHub上公开秘密:泄露凭证和API密钥后该怎么办的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/572169

相关文章

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三