在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

相关文章

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.