Python脚本如何避免存储明文密码?安全存储认证凭据方案咨询
Python项目安全存储敏感凭证方案
核心原则为敏感信息和业务代码完全分离,代码仓库仅存储逻辑内容,不存放任何个人凭证、密钥等敏感数据,即可满足安全共享代码、不泄露密码的需求,以下是可直接落地的可行方案:
1. 环境变量方案(最通用,跨平台兼容)
- 操作方式:将邮箱密码、网站认证密钥等敏感信息设置为操作系统级别的环境变量,Python代码中通过
os模块读取即可 - 代码示例:
import os # 读取环境变量中存储的邮箱密码 email_password = os.getenv("EMAIL_PASSWORD")
- 优势:代码中无任何敏感信息,共享代码时其他使用者只需在自己的设备上配置同名环境变量即可正常运行,无需修改业务代码
2. .env文件方案(本地开发最便捷)
- 操作方式:使用
python-dotenv库加载本地专属的配置文件,完全避免敏感信息进入代码仓库- 安装依赖:
pip install python-dotenv - 在项目根目录创建
.env文件,写入敏感信息(格式为键=值,比如EMAIL_PASSWORD=xxx123) - 在项目的
.gitignore文件中添加.env条目,确保该文件永远不会被提交到代码仓库 - 代码中加载读取:
- 安装依赖:
from dotenv import load_dotenv import os # 加载本地.env文件的配置 load_dotenv() email_password = os.getenv("EMAIL_PASSWORD")
- 优势:本地调试无需反复配置系统环境变量,可额外提交
.env.example模板文件到仓库,标注需要配置的所有敏感字段,方便其他协作者快速配置自己的凭证
3. 系统密钥链方案(安全等级最高)
- 操作方式:调用操作系统原生的加密密钥管理工具(Windows凭据管理器、macOS钥匙串、Linux libsecret)存储凭证,使用
keyring库读写- 安装依赖:
pip install keyring - 终端执行命令存储凭证:
keyring set <自定义应用标识> <账户名>,按提示输入密码即可存入系统加密区域 - 代码中读取凭证:
- 安装依赖:
import keyring email_password = keyring.get_password("<自定义应用标识>", "<账户名>")
- 优势:凭证全程由系统加密存储,不存在明文配置文件泄露风险,就算他人获取到你的项目文件,没有系统权限也无法读取密码
若项目需要部署到服务器/云环境,可对应使用云厂商提供的密钥管理服务(KMS)、容器服务专属的Secret配置来管理生产环境的凭证,同样遵循代码和敏感信息分离的原则。
内容的提问来源于stack exchange,提问作者Brenno Ferreira
相关产品推荐
相关产品推荐

