Skip to main content

Dotenvx和AI的整合:为context提供配置信息,同时保护你的敏感信息

· 2 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

在之前的一篇文章中,我们介绍了AI编程:配置先行,讨论了配置在AI编程中的重要性,它是编程中不可缺少的一环, 不单是代码和配置的分离,更是AI Agent生成代码时的重要上下文信息来源。

我们希望AI Agent能够读取配置文件中的配置项,从而生成更符合我们需求的代码片段,但是我们也不希望AI Agent读取敏感信息,如数据库密码、API Key等, 造成敏感信息的泄露。那么Dotenvx在这方面能提供什么帮助呢?

目前不少AI工具都会支持.aiignore这些文件,用于告诉AI Agent忽略某些文件或者目录, 如Cursor有自己的.cursorignore,详细可以参考 https://cursor.com/cn/docs/context/ignore-files

Dotenvx的软连接的内存占用情况

· 2 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

dotenvx link <command>命令可以创建命令软连接,这个是对原有命令的封装。当你执行软连接命令式,其实是由Dotenvx命令行来执行的, 然后会加载配置文件,然后再执行原命令,这样就完成了对原命令的.env配置集成。

在日常中,只要涉及到诸如数据库的场景,数据库的链接信息已经在.env或者application.properties中配置好啦,如MySQL, 我通常会执行dotenvx link bin/mysql创建对应的dotenvx软连接,然后执行./bin/mysql, 就可以登录配置项指定的MySQL数据库了,不需要输入任何账户密码,非常方便。 同时也不用担心密码泄露的问题,之前都是保存在某一justfile中,密码也是直接写到文件中的,你当然可以不写, 但是公司内部的防弱密码政策,完全让我记不住这些密码,手动输入非常麻烦。

那有同学会问,使用这种软连接方式会不会增加额外的内存占用呢?效率高吗?这里给大家做一个简单的对比。

Dotenvx企业版本特性:加密混淆

· 3 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

Dotenvx采用非对称加密,也就是使用public key加密,使用private key进行解密,加密后的内容使用base64进行文本化, 典型的样例就是encrypted:xxxx这样的加密文本值。

在一个典型的.env文件中,保存有普通文本配置,加密项配置和Public Key,然后根据Public Key查找到对应的private key, 就可以进行解密,这个算法也是公开的。

但是在企业内部,处于较高的安全需求,希望即便拿到了private key,也无法解密配置项。那么如何做到这一点呢?

Dotenvx企业版本提了一个加密值混淆的特性,也就是说加密的值,也就是对应的字节数组,会在进行一次混淆,然后再以文本方式呈现出来, 在界面的时候,你需要知道对应的混淆算法,然后才能进行解密。

Dotenvx整合了Linter,快速检查.env是否符合规范

· One min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

最新的Dotenvx 0.4.26版本,增加了新的dotenvx lint命令,可以帮助你检查.env文件中的配置项是否符合规范。 dotenvx lint命令基于dotenv-linter 4.0

dotenv-linter默认包含的规则如下:

  • ✅ Duplicated key
  • ✅ Ending blank line
  • ✅ Extra blank line
  • ✅ Incorrect delimiter
  • ✅ Key without value
  • ✅ Leading character
  • ✅ Lowercase key
  • ✅ Quote character
  • ✅ Schema violation
  • ✅ Space character
  • ✅ Substitution key
  • ✅ Trailing whitespace
  • ✅ Unordered key
  • ✅ Value without quotes

考虑到dotenvx的一些特殊性,如DOTENV_PUPLIC_KEY在文件开头位置,所以dotenvx lint命令会自动忽略❌ Unordered key,这个大家注意一下。

Dotenvx和Bun的一些整合样例

· 2 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

Bun 1.3发布啦,特性太大啦,有点目不暇接,不要TLDR,有精力的同学还是可以看看的,吃不了亏,上不了当。

Bun有对环境变量和.env文件的默认支持,详细请参考Bun Environment variables 借助这些环境变量,Bun可以快速完成诸如数据库连接、Redis连接、S3连接等操作,非常简单。 如在.env中中添加以下配置,Bun就会完成默认的数据库连接:

MYSQL_URL="mysql://root:this_is_long_password@localhost:3306/test"

但是保存在.env文件中的敏感信息都是明文的,这样就会有泄露风险,那么如何结合Dotenvx来保护这些敏感信息呢?

几种常见的配置文件加密方案对比: .env, SOPS, Vault, Dotenvx

· 4 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

在现代应用开发中,保护敏感配置数据(如API密钥、数据库密码等)变得越来越重要。典型的配置会包含两个部分:

  • Settings: 普通配置项,非敏感数据,如监听打开,日志level等
  • Secrets: 敏感配置项,如数据库密码,API Key等

典型的配置系统通常会同时包含这两部分配置项,Settings通常以明文形式存储,而Secrets则需要加密保护。

接下来是几种常见的配置文件加密方案的对比分析:

普通的.env文件

这个是最常见的方案,简单易用,你只需要在项目根目录创建一个.env文件, 并将其添加到.gitignore中,确保它不会被提交到版本控制系统中。然后使用类似dotenv的库在应用启动时加载这些环境变量。

.env文件的优点是简单直接,各种语言和框架都有对应的库支持,使用方便,适合小型项目和个人开发者。 在Node.js和Python生态中,.env非常流行,看一下这两个语言的dotenv库就知道啦。

当然.env文件也有一些缺点,就是没有加密特性,敏感信息以明文形式存储在文件中,比如如果不小心提交到了版本控制系统中,可能会导致敏感信息泄露, 这也是GitHub上泄露API Key的主要原因之一,另外如果多人协作开发,协作也非常麻烦。在新的AI Code场景下,明文存储的.env文件,可能会被AI Agent读取到,导致敏感信息泄露。

Dotenvx Spring Boot添加ES256K JWT和secp256k1签名支持

· 2 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

JWT在Web应用中应用非常广泛,对Spring Boot应用也不例外,不少同学都会使用Nimbus JOSE + JWT生成并验证JWT, 当然Nimbus JOSE + JWT也是Spring Boot推荐的JWT开发包。

Nimbus JOSE + JWT覆盖多种算法支持,典型的如HS256,RS256等,当然也包括secp256k1的支持,其算法名称为ES256K, 详细请参考JSON Web Token (JWT) with ES256K (secp256k1) signature

几款常见工具和框架的环境变量配置实践

· 3 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

不少开发工具和框架,都或多或少地依赖环境变量来进行配置,下面介绍几款比较流行的工具和框架。

GoFr

GoFr是一个用Go语言编写的微服务框架,专注于简化微服务的开发和部署。它提供了一套完整的工具和库,帮助开发者快速构建高性能、可扩展的微服务应用。 其配置项,GoFr Config,几乎完全是基于环境变量的。 在开发阶段,你只需要configs/.env文件来保存配置项,而在生产环境中,你可以通过环境变量来覆盖这些配置项。

Deno

Deno是一个基于V8引擎的JavaScript和TypeScript运行时,旨在提供一个安全、现代化的开发环境。Deno内置了对TypeScript的支持,并且默认启用了许多安全特性,如权限控制和模块化。 Deno默认支持.env文件,如deno run --env-file main.ts,可以轻松为Deno应用加载环境变量配置项。

此外Deno自身的配置,也是基于环境变量的,可以通过Special environment variables进行查看。

如何使用Dotenvx保护Spring Boot REST API的字段级加密?

· 5 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

dotenvx-spring-boot为Spring Boot应用提供了完美的配置项加密和解密支持, 保护你的配置项不被泄露,而且Dotenvx JetBrains Plugin也提供了非常好的IDE使用体验, 既保证了你的配置项安全,又保证了你的使用体验,不会降低你的工作效率。

使用Spring Boot开发REST API时,有时会涉及到一些安全级别比较高的场景,如提供用户敏感信息的REST API,会包括手机号码、身份证号码、银行卡号等, 当然这些REST API只会开放给特定的应用,而且也有注入JWT Token验证、IP来源限制等安全措施,但是安全同学还是会要求你对这些敏感信息进行字段级加密, 这样只有掌握密钥的应用,才能解密这些敏感信息,这样即便是REST API被攻击,攻击者也无法获取到敏感信息。

那么如何才能做到字段级加密呢?让我们看一下典型的做法,这里我们以抖音平台应用对接为例,进行一个说明。

Dotenvx能为Apache Maven做点什么?

· 3 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

Apache Maven是Java生态系统中最流行的构建工具之一,广泛应用于Java项目的构建、依赖管理和项目生命周期管理。 但是在某些场景下,我们可能需要在Maven构建过程中使用一些敏感信息,比如API密钥、数据库密码等, 典型的做法就是pom.xml文件中使用${env.VAR_NAME}来引用环境变量,然后在构建环境中设置这些环境变量即可。

典型的做法就是编写一个.env文件,然后填写相关的环境变量,然后使用一些.env支持的工具,如direnvjust - task runner等工具,都比较简单的。

如果不想使用普通明文的.env文件,而想使用Dotenvx加密版本的.env文件,那么应该如何做呢?