在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

相关文章

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地址三

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

一文详解如何在Vue3中封装API请求

《一文详解如何在Vue3中封装API请求》在现代前端开发中,API请求是不可避免的一部分,尤其是与后端交互时,下面我们来看看如何在Vue3项目中封装API请求,让你在实现功能时更加高效吧... 目录为什么要封装API请求1. vue 3项目结构2. 安装axIOS3. 创建API封装模块4. 封装API请求

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应