环境变量与密钥管理:别把密码写在代码里

Python操作 JWT(python-jose包)、哈希(passlib包)、用户验证完整流程 JWT 即JSON 网络令牌JWT(JSON Web Token) 是一种用于在身份提供者和服务提供者之间传递身份验证和授权数据的开放标准。JWT是一个JSON对象,其中包含了被签名的声明。这些声明可以是身份验证的声明、授权的声明等。JWT可以使用数字签名进行签名,以确保它不被篡改。JWT 是一种将 JSON 对象编码为没有空格,且难以理解的长字符串的标准。JWT 字符串没有加密,任何人都能用它恢复原始信息。jwt官网及在线解码但 JWT 使用了签名机制。接受令牌时,可以用签名校验令牌。 阅读详情

在这里插入图片描述

​ 密钥硬编码在代码里,推到 GitHub 上就等于公开。环境变量是最简单的解法,代码里只写变量名,值留在运行环境里。

​ 例如,我们可以用export的方式将密钥写入环境变量:

export JWT_SECRET_KEY=$(openssl rand -hex 32)

​ 短短一行,涉及三个独立的知识点:export 是什么、openssl rand 在干嘛、$(...) 又是什么语法。这篇把它们逐个拆开,再讲讲 Python 项目里管理密钥的常见做法。

一、先拆命令:这一行到底做了什么

export JWT_SECRET_KEY=$(openssl rand -hex 32)

​ 从内往外拆,分三层:

1.1 第一层:openssl rand -hex 32

​ openssl 是一个加密工具箱,几乎所有 Linux/macOS 系统都预装了。rand 是它的子命令,作用是生成密码学安全的随机数据。

openssl rand -hex 32
# a3f1b9c7e2d4...(64个十六进制字符)
  • -hex 表示输出格式为十六进制(0-9, a-f)
  • 32 是字节数,不是字符数

​ 32 字节 = 256 bit 的随机数据,用 hex 表示就是 64 个字符。为什么选 256 bit?因为 JWT 默认的 HS256 算法名字里的 256 就是指 256 bit 的密钥强度,32 字节刚好匹配。

​ 其他常见的输出格式:

openssl rand -hex 16      # 128 bit,32 个十六进制字符
openssl rand -hex 32      # 256 bit,64 个十六进制字符
openssl rand -base64 32   # 32 字节,用 Base64 编码输出(更短)

​ 关键点:这里生成的是密码学安全的随机数,不是 random.random() 那种伪随机。密码学安全意味着攻击者无法通过观察输出来预测下一个值,适合用来做密钥、Token、Session ID 这类安全敏感的场景。

1.2 第二层:$(…) 命令替换

​ $(...) 是 Shell 的命令替换(command substitution)语法。它会先执行括号里的命令,然后把输出结果填回原位。

# 这两行效果一样:
JWT_SECRET_KEY=$(openssl rand -hex 32)

# 等价于手动复制粘贴:
JWT_SECRET_KEY=a3f1b9c7e2d4...

​ Shell 看到 $(openssl rand -hex 32) 时,会先跑 openssl rand -hex 32,拿到输出的 64 个字符,然后把这串字符填到 = 右边,赋值给变量。

​ 你在其他地方也会看到这个语法:

CURRENT_DATE=$(date +%Y-%m-%d)   # 拿到今天的日期
FILE_COUNT=$(ls | wc -l)          # 拿到当前目录的文件数
GIT_HASH=$(git rev-parse HEAD)    # 拿到当前 commit 的哈希

1.3 第三层:export

​ export 把变量标记为环境变量,让子进程也能看到它。

(1) 不加export,只是shell变量

​ 没有 export,只是 Shell 变量。当前Shell能用,启动的程序看不到。

JWT_SECRET_KEY=abc123
python app.py  # app.py 里 os.environ["JWT_SECRET_KEY"] → KeyError
(2) 使用export定义为环境变量

​ 使用export定义为环境变量,子进程也能读到。

export JWT_SECRET_KEY=abc123
python app.py  # app.py 里 os.environ["JWT_SECRET_KEY"] → 密钥内容

​ 这就是为什么必须加 export。不加的话,python app.py 是当前 Shell 启动的子进程,它读不到这个变量。

1.4 常见踩坑:export 了但 Python 还是 KeyError

​ 加了 export,运行 Python 还是报 KeyError: 'JWT_SECRET_KEY'。十有八九是 export 和 python 不在同一个终端会话里。

​ export 设的环境变量只在当前终端有效。换一个终端窗口、新开一个 tab、关掉终端重新打开,之前 export 的变量全没了。验证方法很简单:

# 在同一个终端里,先 export 再 echo 确认,最后跑 Python
export JWT_SECRET_KEY=$(openssl rand -hex 32)
echo $JWT_SECRET_KEY    # 能打印出来才说明 export 成功了
python app.py           # 紧接着跑,不要切窗口

​ 几种典型的"不在同一个会话"的情况:

你做了什么为什么读不到怎么解决
终端 A 里 export,终端 B 里跑 Python不同终端是不同的 Shell 进程,变量不共享在同一个终端里操作
终端里 export,但从 VS Code / PyCharm 点"运行"IDE 启动 Python 用的是自己的终端环境,不是你手动操作的那个在 IDE 内置终端里重新 export,或用 .env 文件
export 之后关了终端,重新打开再跑export 不会持久化,终端关了就没了每次开终端重新 export,或用 .env 文件
写在 ~/.bashrc 里但没 source修改配置文件后需要 source ~/.bashrc 才会生效执行 source ~/.bashrc 或重新打开终端

​ 如果你经常遇到这个问题,说明 export 的方式不适合你的工作流。 后面会讲 .env 文件的方案,把变量写在项目里,Python 启动时自动加载,不依赖终端状态。

二、环境变量是什么

​ 理解了命令,再往上一层看:环境变量到底是个什么东西?
在这里插入图片描述

​ 环境变量是操作系统级别的键值对,从系统 → Shell → 程序逐层继承。export 让变量能穿透到下一层。

​ 环境变量就是操作系统维护的一组键值对,每个进程启动时都会从父进程继承一份。你最常见的环境变量是 PATH,它告诉系统去哪些目录找可执行文件。

# 查看所有环境变量
env

# 查看某一个
echo $PATH
echo $HOME

​ 你自己 export 的变量和系统的 PATH、HOME 本质上没有区别,都是键值对,只是名字和用途不同。

2.1 Python 里怎么读

import os

# 读取,不存在就 KeyError
secret = os.environ["JWT_SECRET_KEY"]

# 读取,不存在就返回默认值
debug = os.environ.get("DEBUG", "false")

​ 两种写法的选择很有讲究:

  • os.environ["KEY"]:不存在就崩。适合必须有的配置,比如密钥。宁可启动时崩掉,也不要用默认值悄悄跑,密钥用默认值上线就是安全事故。
  • os.environ.get("KEY", default):不存在就用默认值。适合可选配置,比如 DEBUG、PORT。

2.2 os.environ也能写,但别用它管密钥

​ os.environ 本质就是一个字典,能读当然也能写:

import os
import secrets

os.environ["JWT_SECRET_KEY"] = secrets.token_hex(32)
print(os.environ["JWT_SECRET_KEY"])  # 后面的代码确实能读到

​ 但这个值只活在当前 Python 进程里。进程一退出就没了,不会影响终端环境,也不会影响其他程序。

  • 和 export 的区别:

    export(Shell)os.environ["X"] = "Y"(Python)
    生效范围当前终端 + 所有子进程当前 Python 进程
    进程退出后终端关闭前都在没了
    密钥来源外部注入,代码里看不到值写在代码里,和硬编码没区别

    所以正式代码里不要用 os.environ 写密钥。那只是换了种方式把密钥写在了源码里。它更常见的用途是测试,临时注入一个假值方便跑测试用例:

    # test_auth.py
    import os
    os.environ["JWT_SECRET_KEY"] = "test-key-not-for-production"
    
    # 然后运行被测代码...
    

三、密钥放在哪里

3.1 为什么不能把密钥写在代码里

​ 新手最自然的写法是这样:

SECRET_KEY = "my-super-secret-key-123"

​ 能跑,但有三个问题:

​ 1. 推到 GitHub 就公开了。 代码仓库通常是团队共享的,甚至是开源的。密钥一旦进了 git 历史,即使后来删掉,用 git log 也能找回来。GitHub 上有专门的机器人扫描泄露的密钥,AWS 的 Access Key 泄露后平均几分钟就会被人拿去挖矿。

​ 2. 不同环境用不同的值。 开发环境、测试环境、生产环境的密钥应该不同。如果写死在代码里,切换环境就要改代码,改了又容易忘记改回来。

​ 3. 轮换密钥要改代码。 密钥泄露或定期轮换时,如果密钥在代码里,就得改代码、提交、部署。如果在环境变量里,改个配置重启就行,不需要动代码。

​ 用环境变量解决这些问题的思路很简单:代码里只写变量名,值留在运行环境里。 代码可以公开,只要环境变量不泄露,密钥就是安全的。

3.2 .env 文件:开发环境的便捷方案

​ 每次开终端都要手动 export 一堆变量很烦。开发阶段常见的做法是把变量写在项目根目录的 .env 文件里:

# .env
JWT_SECRET_KEY=a3f1b9c7e2d4a8f6b1c3d5e7f9a0b2c4d6e8f0a1b3c5d7e9f1a2b4c6d8e0f2
DATABASE_URL=postgresql://user:pass@localhost:5432/mydb
DEBUG=true

​ 然后在 Python 里用 python-dotenv 自动加载:

pip install python-dotenv
from dotenv import load_dotenv
load_dotenv()  # 读取 .env 文件,把里面的键值对注入环境变量

import os
secret = os.environ["JWT_SECRET_KEY"]  # 现在能读到了

​ load_dotenv() 做的事很简单:读 .env 文件的每一行,按 KEY=VALUE 格式解析,然后调用 os.environ 设置进去。之后的代码用 os.environ 读取,和真正的环境变量完全一样。

3.3 .env 绝对不能提交到 git

​ 这是最容易犯的错。.env 里存的就是密钥,提交了等于白做。项目初始化时就要把它加进 .gitignore:

echo ".env" >> .gitignore

​ 那新同事怎么知道要设哪些变量?常见做法是提供一个 .env.example 文件:

# .env.example(提交到 git,告诉别人需要哪些变量)
JWT_SECRET_KEY=<用 openssl rand -hex 32 生成>
DATABASE_URL=postgresql://user:pass@localhost:5432/mydb
DEBUG=true

​ .env.example 里写的是说明和示例值,不是真正的密钥。新同事 clone 项目后,复制一份改成自己的值就行:

cp .env.example .env
# 然后编辑 .env,填入真正的值

四、生产环境怎么管理

​ .env 文件适合开发,但生产环境有更专业的方案:

方案适合场景说明
系统环境变量单机部署写在 /etc/environment 或 systemd 的 service 文件里
Docker容器化部署docker run -e JWT_SECRET_KEY=xxx 或 docker-compose.yml 的 environment 字段
云平台配置云服务AWS Parameter Store、阿里云配置中心、Vercel Environment Variables
Vault企业级HashiCorp Vault,支持自动轮换、审计、细粒度权限

​ 不管用哪种方案,核心原则不变:代码里读 os.environ,值由部署环境提供。 代码不关心密钥从哪来,只关心 os.environ["JWT_SECRET_KEY"] 能拿到值。

​ 以Docker Compose 为例,实际项目中,密钥一般也写在 .env 文件里,docker-compose 会自动读取同目录下的 .env,不需要你手动 export。

在这里插入图片描述

​ 密钥的流转路径:.env 文件 → Docker Compose 读取并替换占位符 → 注入容器环境变量 → Python 用 os.environ 读取。密钥始终不出现在代码或 YAML 里。

# .env文件内容(和 docker-compose.yml 放在同一目录)
JWT_SECRET_KEY=a3f1b9c7e2d4a8f6b1c3d5e7f9a0b2c4d6e8f0a1b3c5d7e9f1a2b4c6d8e0f2
DATABASE_URL=postgresql://user:pass@db:5432/mydb
# docker-compose.yml
services:
  web:
    build: .
    environment:
      - JWT_SECRET_KEY=${JWT_SECRET_KEY}
      - DATABASE_URL=${DATABASE_URL}

​ 流程是这样的:docker-compose up 启动时,Compose 先读 .env 文件里的键值对,然后把 ${JWT_SECRET_KEY} 这类占位符替换成实际的值,最后注入到容器内部的环境变量里,容器里的 Python 代码用 os.environ["JWT_SECRET_KEY"] 读取,和本地开发一模一样。

​ .env 文件同样不能提交到 git,和前面讲的规则一致。团队协作时提供 .env.example 告知需要哪些变量,每个人自己创建 .env 填入真实值。

五、完整的项目结构示例

​ 把上面讲的串起来,一个典型的 Flask 项目应该长这样:

my-project/
├── .env              ← 本地开发用,不提交
├── .env.example      ← 提交到 git,说明需要哪些变量
├── .gitignore        ← 包含 .env
├── app.py
└── requirements.txt
  • .gitignore:

    .env
    __pycache__/
    
  • .env.example:

    # 密钥:用 openssl rand -hex 32 生成
    JWT_SECRET_KEY=
    # 数据库(本地开发默认值)
    DATABASE_URL=postgresql://localhost:5432/mydb
    # 调试模式
    DEBUG=true
    
  • app.py:

    import os
    from dotenv import load_dotenv
    load_dotenv()
    
    SECRET_KEY = os.environ["JWT_SECRET_KEY"]     # 必须有,没有就崩
    DEBUG = os.environ.get("DEBUG", "false") == "true"  # 可选,默认关闭
    

六、总结

​ 回到开头那行命令:

export JWT_SECRET_KEY=$(openssl rand -hex 32)
部分作用
openssl rand -hex 32生成 256 bit 密码学安全的随机密钥
$(...)命令替换,把输出填到等号右边
export标记为环境变量,让 Python 子进程能读到

​ 背后的原则也就一句话:密钥不进代码,代码只读变量名。 开发用 .env + python-dotenv,生产用平台提供的配置管理。这样代码可以安全地提交、分享、开源,密钥的生命周期和代码的生命周期彻底解耦。

别把密码写进代码:环境变量与密钥管理实战指南 硬编码密码、Token 和密钥是源代码泄露最常见的隐患,一句随手写在配置文件里的 database password,就可能通过 Git 提交、群聊转发或公开仓库传播到不可控的地方。环境变量作为操作系统级键值对机制,通过进程外部注入配置,让代码与敏感凭据彻底分离,是抵御硬编码风险的第一道防线。理解环境变量配置原理、主流语言实现方式以及 .env 文件的正确用法,能从根本上避免密钥进入版本库。进一步结合 CI/CD 流水线注入、Docker 环境变量传递和密钥轮换机制,还能构建覆盖全生命周期的安全管理体系。从 阅读详情

相关推荐

环境变量与密钥管理实战:彻底告别硬编码密码

在软件开发中,数据库密码、API Key 等敏感信息如果直接写进代码仓库,一旦泄露便难以追踪和控制,攻击者能在几分钟内扫描并利用这些密钥,造成严重安全事故。环境变量是进程启动时由父进程注入的一组键值对,通过将敏感配置与代码分离,应用在不同环境中可共享同一份代码,而秘密仅存在于运行时环境中。从本地开发使用 .env 文件与 dotenv 机制,到 CI/CD 流水线中的 Secrets 配置,再到生产环境引入云厂商 KMS 或 HashiCorp Vault 进行密钥管理,环境变量提供了分层解决方案。关键在于

weixin_28622215的博客 91

随机生成字符串

cat /dev/urandom | strings -n 8 | head -n 100 #随机生成100个长度至少8位的字符串 cat /dev/urandom | sed 's/[^a-Z0-9]//g' | strings -n 7 | head -n 10 #随机生成10个长度至少7位的字母和数字混合字符串

wangzhicheng2013的专栏 1481

Python密钥安全:告别硬编码,环境变量与密钥管理实战

在软件开发中,密钥管理是保障系统安全的核心环节之一。无论是API Key、数据库密码,还是云平台访问凭证,一旦以明文形式硬编码在代码中,都可能因代码上传至GitHub、团队协作或历史版本残留而引发密钥泄漏。环境变量作为代码与敏感信息分离的最基础手段,配合.env文件与.gitignore规则,能有效解决本地开发与项目提交时的凭证暴露问题。更进一步,KMS、Vault等密钥管理服务则通过集中存储、加密下发和权限控制,为生产环境提供更可靠的防护。本文从这一通用安全实践出发,结合Python工程中的典型场景,系统

weixin_34279579的博客 589

【密码学实战】openHiTLS rand命令行:随机数生成工具

hitls rand`是 openHiTLS 密码工具包中的核心随机数生成命令,专门用于生成密码学安全的伪随机字节序列。openHiTLS 作为一款开源密码工具集,致力于提供符合国家标准的密码学解决方案,而 `hitls rand` 正是其在随机数生成领域的关键组件。该命令基于 Mulan PSL v2 许可证开源,不仅具备跨平台兼容性,还提供了严格符合《GM/T 0005-2021 随机性检测规范》等国家安全标准的随机数生成能力,可广泛应用于密码学相关的各类场景。

1093

数据库密码安全管理:加密存储与密钥管理最佳实践

数据库密码安全是系统防护的关键环节,涉及加密算法选择、密钥管理和访问控制等多方面技术。加密与哈希是数据保护的两种基础手段,其中AES等可逆加密算法适用于数据库密码存储,而单向哈希更适合用户密码。通过硬件安全模块(HSM)实现密钥管理,结合环境变量注入和定期轮换策略,可有效提升安全性。在金融等行业实践中,分层权限设计和密码复杂度策略能显著降低数据泄露风险。本文以AWS KMS等工具为例,详解生产环境中的密码全生命周期管理框架。

weixin_32234493的博客 130

环境变量密码加密:从AES到KMS的纵深防御实践

在软件开发和系统运维中,环境变量配置是管理应用敏感信息的常见方式,它允许在不同部署环境间灵活切换配置。然而,直接将密码等机密信息以明文形式存储于环境变量,会面临配置文件意外泄露、低权限用户窥探等安全风险。加密技术的核心原理在于通过算法(如对称加密AES或非对称加密RSA)和密钥,将明文转换为无法直接识别的密文,从而在静态存储层面为敏感数据增加保护层。其技术价值在于实现了一种纵深防御策略,即使存储介质泄露,攻击者也无法直接利用密文,为应急响应和密钥轮换争取了宝贵时间。在实际应用场景中,无论是防御GitHub等

weixin_29322553的博客 231

使用 OpenSSL 和 Python 实现 AES-256-CBC 加密与解密(安全密钥管理)

使用 OpenSSL 和 Python 实现 AES-256-CBC 加密与解密, 在不加密的软件上也能安全传输你的加密消息!

Keirakee的博客 2978

Unity中实现FairyGUI弹窗背景模糊的3种方法对比(附完整代码)

本文详细对比了Unity中实现FairyGUI弹窗背景模糊的3种方法,包括FairyGUI原生滤镜方案、多摄像机混合渲染方案和渲染纹理动态混合方案。每种方法均附有完整代码示例,帮助开发者根据项目需求选择最佳方案,实现镜头虚化模糊效果,提升游戏UI的视觉沉浸感。

ff678的博客 230

把密码写在 .env 文件里,真的安全吗?

将密码写在 .env 文件中虽仍为明文,但因其不提交至 Git,相比直接写在 docker-compose.yml 中更安全。核心优势在于配置与代码分离,避免敏感信息泄露。配合 .gitignore、模板文件、权限控制及生产环境的 Secrets 管理(如 Vault、Kubernetes Secrets),可构建分层安全策略。关键原则:绝不将密钥提交到 Git。

cjp19882009的博客 444

Linux PE vs WinPE:为何麒麟系统修复需要专属工具?

本文探讨了Linux PE与WinPE在修复国产麒麟系统时的关键差异,强调了专属工具的必要性。通过分析文件系统兼容性、引导修复、硬件适配和安全合规等方面,揭示了通用PE工具的局限性,并提供了构建专属修复工具链的实用方案,确保系统维护的高效与安全。

weixin_29290863的博客 1055

别再死磕U-Net了!用PyTorch手把手教你搭建ResUnet,搞定医学图像分割(附完整代码)

本文详细介绍了如何利用PyTorch搭建ResUnet模型,通过引入残差连接解决医学图像分割中的梯度消失、特征退化和细节丢失问题。与传统U-Net相比,ResUnet在Dice系数和收敛速度上均有显著提升,特别适合处理脑部MRI等复杂医学图像。文章还提供了完整的代码实现和关键训练技巧,帮助开发者快速掌握这一先进技术。

weixin_42552637的博客 326

PHP项目硬编码密码治理:从风险分析到环境变量与密钥管理实践

在软件开发中,凭据管理是安全防护的基石。硬编码密码,即把数据库口令、API密钥等敏感信息直接写入源码或配置文件,看似便捷,实则埋下巨大隐患。其原理在于将本应动态注入的运行时凭据静态固化,一旦代码仓库泄露或日志异常暴露,攻击者即可横向渗透,引发数据泄露与合规风险。通过环境变量、独立配置文件或专业密钥管理服务,可将密码从代码中剥离,实现安全与灵活的平衡。这种实践适用于从单机部署到微服务架构的各类场景,尤其对PHP项目而言,结合phpdotenv与自动化扫描工具,能低成本、高效率地清除存量隐患,并建立长效防护机制

weixin_32349561的博客 334

Visual Studio Git 使用指南

Visual Studio 2022深度集成了Git功能,提供了直观的图形界面管理源代码。本文详细介绍了VS中Git的使用方法:从环境准备、克隆/创建仓库开始,重点讲解了"Git更改"窗口的日常操作,包括查看修改、暂存文件、提交推送等。同时涵盖了分支管理、查看历史、解决冲突等核心功能,以及储藏、重置等高级操作。文章还提供了实用技巧,如提交规范、频繁提交等最佳实践。VS的Git集成覆盖了日常开发需求,图形界面与命令行可互补使用,适合各层次开发者高效管理代码版本。

guigenyi的专栏 1565

为什么密码保存在环境变量是安全的,如果有人登录了服务器,仍然可以获取环境变量,而且一些日志也可能将环境变量打印出来

环境变量不是绝对安全,只是“相对不坏”的方式,适合中等敏感度数据。对于更敏感的密码(如数据库 root、第三方 API 密钥),推荐使用真正的“密钥管理服务”。如果你愿意,我可以根据你的部署场景(裸机、Docker、Kubernetes)具体推荐安全密码管理方案。你也可以让我帮你写一份《安全存储凭据的技术建议书》说服其他同事或开发商。

Debug yourself! 1045

apt-get update时出现GPG error:... bionic InRelease:The following signatures were invalid: EXPKEYS解决方案

本文主要介绍了apt-get update时出现W: GPG error: … bionic InRelease: The following signatures were invalid: EXPKEYSIG B7B3B788A8D3785C MySQL Release Engineering E: The repository ‘… bionic InRelease’ is not signed.解决方案,希望能对使用Ubuntu系统的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

基于FFT的轴承故障诊断 - MATLAB代码和详细解释

最后,我们可以根据异常特征的位置和特征分析来确定轴承故障的类型。最后,我们可以根据异常特征的位置和特征分析来确定轴承故障的类型。因此,通过分析频谱图,我们可以识别轴承故障的特征。因此,通过分析频谱图,我们可以识别轴承故障的特征。我们可以选择适当的阈值,并在频谱图上标记异常特征。通过这种基于FFT的轴承故障诊断方法,我们可以快速、准确地检测和诊断轴承故障。接下来,我们将应用FFT来获取振动信号的频谱信息,频谱显示了信号在不同频率上的能量分布。通过将异常特征标记在频谱图上,我们可以直观地识别轴承故障的存在。

COWizard的博客 613

OpenSubtitlesDownload安全指南:账号密码与API密钥管理的最佳实践

OpenSubtitlesDownload是一款知名的开源字幕下载工具,通过opensubtitles.com的REST API自动为你的视频匹配并下载字幕。使用它需要注册并登录opensubtitles.com账号,因此账号密码与API密钥的安全管理,直接关系到你的数据与账户安全。本指南将为你梳理OpenSubtitlesDownload配置中的常见安全风险,并给出简单实用的最佳实践,让新手也能

gitblog_01178的博客 790

JAVA安全开发(二十三):Java加密的基石与命门——深入JCA/JCE架构与密钥管理

本文深入解析Java密码学架构(JCA/JCE)的核心机制与密钥管理实践。文章首先介绍JCA/JCE通过提供者机制实现算法与实现分离的设计理念,以及Cipher、MessageDigest等核心引擎类的功能。重点聚焦密钥管理这一加密体系的命门,严厉批判了硬编码密钥的错误做法,并提出从基础到企业级的密钥管理方案阶梯:包括外部配置文件、环境变量、Java KeyStore加密存储,直到采用专业的密钥管理服务(KMS)。

专注于网络安全攻防技术与安全运营(SecOps)实践。 1889

【AI应用实战-WorkBuddy】WorkBuddy 能帮你做什么(一)

文章摘要: WorkBuddy是一款AI工作助手,专为提升效率而设计,适用于经常处理文档、代码、数据分析等重复性任务的职场人士。它能通过自然语言交互快速完成五大核心场景任务: 周报撰写:输入工作要点,10分钟生成专业周报; 代码调试:解析报错信息,3分钟提供解决方案; Excel分析:自动计算数据趋势并生成图表和结论; 自动化脚本:将重复流程转为脚本,节省98%时间; 文档生成:根据代码自动补充README、API文档和注释。 效果对比:传统手动操作耗时1-3小时的任务,WorkBuddy可将时间缩短至10

343

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

python如何避免在代码中明文显示密码

推荐的做法是根据项目的安全需求选择适合的方案。通常结合环境变量和密钥管理系统是更安全且符合现代开发规范的方法。

Debug yourself! 830

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

AI应用安全部署:3步实现环境变量与密钥管理,告别硬编码风险

在软件开发和部署中,配置管理是保障应用安全的核心环节。其核心原理在于将易变的配置信息(如API密钥、数据库连接串)与稳定的业务逻辑代码分离,遵循“关注点分离”的工程原则。这项技术的核心价值在于能从根本上防止敏感信息泄露,避免因密钥硬编码导致的API盗用、数据窃取及服务封禁等安全风险,是构建可信应用的基石。其通用应用场景覆盖从本地开发、CI/CD流水线到云原生容器化部署的全流程。本文以提示词优化器项目为例,聚焦于通过环境变量实现配置与代码的彻底分离,并深入探讨了结合python-dotenv进行本地开发、以及

weixin_32234493的博客 262

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

密码管理中注释与重定向密码安全隐患及修复方案

文章摘要: 开发中常见两种密码泄露风险:1)注释硬编码:敏感信息留在代码注释中,易因代码泄露暴露,导致低门槛攻击和横向渗透。修复需彻底删除、改用环境变量或密钥管理服务,并加强代码审查。2)URL明文传输:密码通过URL参数传递,会留存于浏览器历史、服务器日志及Referer头,易遭窃取或钓鱼。应改用POST请求、Session管理及安全重定向。核心原则:禁止硬编码密码和URL传递敏感信息,优先使用HTTPS、环境变量和会话机制保障安全。

zqmattack的博客 638

APISecurityBestPractices安全存储方案对比:环境变量、加密存储与密钥管理服务

APISecurityBestPractices是GitGuardian提供的开源项目,专注于帮助开发者防止API密钥、数据库凭证、证书等敏感信息泄露到源代码中,并在发生API密钥泄露时提供有效的补救措施。本文将深入对比三种主流的安全存储方案——环境变量、加密存储与密钥管理服务,帮助新手开发者选择最适合自己项目的敏感信息保护策略。 ## 为什么敏感信息存储如此重要? 在软件开发过程中,API密

gitblog_00357的博客 750

PocketBase加密存储:数据加密与密钥管理方案

PocketBase作为一款轻量级开源后端框架,在数据安全方面提供了全面的加密存储解决方案。本文将深入探讨PocketBase的加密机制、密钥管理策略以及最佳实践,帮助开发者构建安全可靠的应用系统。 ## 核心加密架构 ### 1. 密码字段加密机制 PocketBase内置了专门的密码字段类型,采用业界标准的bcrypt哈希算法进行密码存储: ```go // 密码字段定义示例 type...

gitblog_01099的博客 735
上一篇: 【JSON Python篇】通过代码操作 JSON
下一篇: [Token实战]Flask JWT 登录接口
未收敛
博客等级 码龄11年 3303粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未收敛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值