”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Python 项目中的安全 API 密钥处理

Python 项目中的安全 API 密钥处理

发布于2024-11-04
浏览:465

Secure API Key Handling in Python Projects

在 Python 项目中正确管理 API 密钥和环境变量的指南

?介绍

在 Python 中使用 API 时,您经常需要使用 API 密钥或其他敏感凭据。 安全地管理这些密钥以避免泄露敏感信息或意外地将它们提交到您的 Git 存储库至关重要。

如需完整演示,请查看我的 GitHub 存储库 Secure-API-Key-Handling,它具有一个 Streamlit 聊天应用程序,可在与 Gemini Generative AI 模型交互时使用 .env 文件和 python-dotenv 包安全地管理 API 密钥.

?入门

按照以下步骤设置您的项目以进行安全 API 密钥处理:

1.安装依赖项

您需要 python-dotenv 包从 .env 文件加载环境变量。

pip install python-dotenv

2. 设置 .env 文件

在项目根目录中创建一个 .env 文件,您将在其中存储 API 密钥和其他特定于环境的变量:

# .env
API_KEY=your_api_key_here

重要: 这个 .env 文件永远不应该提交到您的存储库。我们将配置 .gitignore 以确保这一点。

3. 将.env添加到.gitignore

将以下行添加到 .gitignore 文件中,以确保 .env 不会被推送到 Git:

# .gitignore
.env

5. 提供 .env.example 文件

对于处理您项目的其他开发人员,请包含 .env.example 文件作为模板:

# .env.example
API_KEY=your_api_key_here

该文件不会包含敏感数据,但它给出了运行项目所需的变量的示例。其他开发人员可以将此文件复制到 .env 并添加他们自己的凭据。

cp .env.example .env

?要避免的常见错误

  • 硬编码 API 密钥:切勿直接在 Python 代码中硬编码敏感信息。
# BAD EXAMPLE: Never do this
api_key = "hardcoded_api_key"
  • 提交 .env 文件 :确保 .env 始终包含在 .gitignore 中,以避免意外将其推入版本控制。

  • 推送虚拟环境:始终从 Git 中排除虚拟环境(如 venv):

# .gitignore
venv/

?资源:

  • 安全 API 密钥处理 GitHub 存储库
  • 安全使用 API 密钥的 8 个技巧
版本声明 本文转载于:https://dev.to/hamznabil/secure-api-key-handling-in-python-projects-1kg7?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 为什么 Go 中不能转换不同类型的切片?
    为什么 Go 中不能转换不同类型的切片?
    为什么不能转换切片类型?无法转换不同类型的切片(如提供的代码片段所示)是由于特定类型转换造成的Go 规范中概述的规则。这些规则控制何时可以将非常量值转换为特定类型。没有任何转换规则适用于您尝试将 Bar 切片转换为 Foo 切片的情况。虽然 Foo 和 Bar 的底层类型相同,但它们各自切片的底层类...
    编程 发布于2024-11-16
  • \“Laravel SQLSTATE [HY000] [2002]连接被拒绝:为什么\'localhost \'修复了问题?\”
    \“Laravel SQLSTATE [HY000] [2002]连接被拒绝:为什么\'localhost \'修复了问题?\”
    “Laravel SQLSTATE[HY000] [2002] 连接被拒绝”:MySQL 连接深度之旅Web 领域开发中,Laravel 是优雅和高效的灯塔。然而,当连接到数据库时,可能会出现意想不到的障碍,例如臭名昭​​著的“连接被拒绝”错误。考虑以下场景:您已经努力将 Laravel 项目部署到...
    编程 发布于2024-11-16
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-16
  • 这些新的 JavaScript 方法改变了游戏规则!
    这些新的 JavaScript 方法改变了游戏规则!
    2023 年 7 月,ECMAScript 发布了多项 JavaScript 新规范。一些功能包括不修改现有数组的新数组方法。在这篇博客中,我们将讨论其中的三个(一个从 2024 年开始),如果您想了解 Web 和 JavaScript 的最新趋势,您必须了解它们! Array.to...
    编程 发布于2024-11-16
  • 如何高效地检索大文本文件的最后一行?
    如何高效地检索大文本文件的最后一行?
    高效检索大型文本文件的最后一行处理大量文本文件时,高效检索最后一行至关重要。对于大文件来说,随机访问可能非常耗时,因此不切实际。相反,请考虑以下解决方案:返回最后一个非空行:下面的 tail 函数可以快速检索文件的最后一个非空行,而无需加载或遍历整个文件。它查找文件末尾并向后读取字符,直到遇到换行符...
    编程 发布于2024-11-16
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-11-16
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-16
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为的主要场景bool:语句:if、whi...
    编程 发布于2024-11-16
  • 浏览器可以使用 JavaScript 建立原始 TCP 套接字连接吗?
    浏览器可以使用 JavaScript 建立原始 TCP 套接字连接吗?
    使用 JavaScript 从浏览器连接到 TCP 套接字:可能吗?要在浏览器和基于 TCP 套接字的服务器应用程序之间建立实时通信,您需要可以探索两种可行的方法:1. XHR 或 WebSocketsXHR (XMLHttpRequest) 和 WebSockets 都有助于浏览器和服务器之间的实...
    编程 发布于2024-11-16
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1和$array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求是构...
    编程 发布于2024-11-16
  • 如何使用系统凭据在 Go HTTP 请求中执行 NTLM 身份验证?
    如何使用系统凭据在 Go HTTP 请求中执行 NTLM 身份验证?
    使用系统凭证的 Go HTTP 请求中的 NTLM 身份验证在此问题中,用户寻求有关在 Go HTTP 中执行 Windows NTML 身份验证的指导使用调用用户的系统凭据进行请求。他们提供了 C# 和 Python 的示例,演示了如何在这些语言中实现此目的。解决方案在于利用 go-ole 库,该...
    编程 发布于2024-11-16
  • 如何确定我的 C/C++ 代码正在编译的 CPU 架构?
    如何确定我的 C/C++ 代码正在编译的 CPU 架构?
    针对特定 CPU 架构进行编译编写 C 或 C 代码时,通常需要了解您所针对的目标 CPU 架构编译。此信息可用于优化代码性能或确保与特定硬件的兼容性。不同的编译器利用各种非标准预处理器定义来区分 CPU 架构(例如,MSVS 中的 _M_X86、GCC 中的 i386__ 和 __arm)。标准检...
    编程 发布于2024-11-16
  • 如何在 Python 模块中模仿类行为?
    如何在 Python 模块中模仿类行为?
    使用 getattr在模块中动态实现类类行为 在某些情况下,可能需要模仿__getattr__ 对类的行为,但对整个模块的行为。这允许动态创建类实例并根据模块上的属性查找调用其方法。但是,尝试直接在模块上定义 __getattr__ 方法面临两个障碍:Python只检查类上的此类方法。修改底层模块类...
    编程 发布于2024-11-16
  • 如何在 Python 中创建真正独立的对象副本?
    如何在 Python 中创建真正独立的对象副本?
    在 Python 中复制对象:综合指南创建对象的副本是 Python 编程中的一项基本任务,尤其是在处理复杂数据时结构。本文深入研究了 Python 中对象复制的复杂性,特别关注创建不受原始对象更改影响的独立对象。浅复制和深复制在Python中,复制对象有两种主要方法:浅复制和深复制。浅复制创建一个...
    编程 发布于2024-11-16
  • 如何从 PHP 中的 SimpleXMLElement 提取内部 XML 内容?
    如何从 PHP 中的 SimpleXMLElement 提取内部 XML 内容?
    PHP SimpleXML:访问内部 XML在 PHP XML 解析领域,SimpleXML 扩展允许开发人员轻松操作 XML 文档。然而,提取 XML 元素的内部内容(排除周围的元素标签)可能具有挑战性。考虑以下 XML 片段:<qa> <question>Who ar...
    编程 发布于2024-11-16

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3