staabm / secure_dotenv
加密环境配置处理器
Requires
- php: ^7.4 || ^8.0
- ext-hash: *
- ext-openssl: *
- defuse/php-encryption: ^2.2
- enygma/cmd: ^0.4.0
- league/climate: ^3.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.43
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9 || ^10.5
- redaxo/php-cs-fixer-config: ^1.0
README
secure_dotenv
库提供了一种简单的方式来处理 .env
文件中信息的加密和解密。
通常认为的一项安全最佳实践是防止使用任何类型的硬编码的明文凭证。这个库允许您将 .env
中的值存储为加密字符串,但仍能透明地访问它们,无需担心实现自己的加密方法。
安装
下载 Composer 包
您可以通过命令行上的 Composer require
调用轻松地安装库
composer require staabm/secure_dotenv
生成密钥
首先,您需要生成加密密钥。该库使用 defuse/php-encryption 库来处理加密。
php vendor/bin/generate-defuse-key
这将生成一个随机字符串,用于与 php-encryption
库的默认加密一起使用。这个字符串应该放在脚本可以访问的文件中。
注意: 根据安全最佳实践,此密钥文件应保持在与文档根目录(不可通过 Web 访问)之外,但应可由 Web 服务器用户(或执行用户)读取。
创建 .env
文件
然后您需要创建想要放置值的 .env
文件
touch /project/root/dir/.env
加载值
在创建了密钥文件和 .env 之后,您现在可以创建一个新的实例,用于读取加密值
<?php require_once __DIR__.'/vendor/autoload.php'; $keyfile = __DIR__.'/keyfile'; $envFile = __DIR__.'/.env'; $d = new \staabm\SecureDotenv\Parser($keyfile, $envFile); // The contents here is the set of all decrypted values fron the .env print_r($d->getContent()); ?>
您也不必使用文件作为密钥的来源 - 您可以使用字符串(可能是来自 $_ENV
变量或其他来源的内容)
<?php require_once __DIR__.'/vendor/autoload.php'; $key = $_ENV['ENCRYPTION_KEY']; $envFile = __DIR__.'/.env'; $d = new \staabm\SecureDotenv\Parser($key, $envFile); ?>
这有助于防止密钥被 本地文件包含攻击 读取。
如果您的 .env
文件中已有未加密的值,库将传递它们,并直接从 .env
配置中返回纯文本版本。
设置值
您还可以使用 Parser
类上的 save()
方法动态地将值设置到 .env
文件中
<?php require_once __DIR__.'/vendor/autoload.php'; $keyfile = __DIR__.'/keyfile'; $envFile = __DIR__.'/.env'; $d = new \staabm\SecureDotenv\Parser($keyfile, $envFile); $keyName = 'test1'; $keyValue = 'foobarbaz'; if ($d->save($keyName, $keyValue)) { echo 'Save successful'; } else { echo 'There was an error while saving the value.'; }
您无需担心加密值,因为库会为您处理它,并将加密结果输出到 .env
文件。
通过 CLI 加密值
这个库还提供了一个方便的方法来自动加密值并将它们写入到 .env
配置中
vendor/bin/encrypt-env --keyfile=/path/to/keyfile
此工具将询问有关 .env
文件位置和要设置的键/值对的一些问题。完成后,它将写入新的、加密的值到 .env
文件。如果配置中已设置值并且您想覆盖它,请使用 encrypt
脚本的 --override
命令行标志。
鸣谢
此包是 https://github.com/psecio/secure_dotenv 的维护版本,最初由 Chris Cornutt 即 @enygma 创建。