messageconcept / secure_dotenv
加密环境配置处理器
Requires
- php: ^7.1|^8.0
- defuse/php-encryption: ^2.2
- enygma/cmd: ^0.4.0
- league/climate: ^3.4
Requires (Dev)
- phpunit/phpunit: ^9.0
This package is not auto-updated.
Last update: 2024-09-20 03:00:13 UTC
README
secure_dotenv
库提供了一种简单的方法来处理 .env
文件中信息的加密和解密。
通常接受的安全最佳实践之一是防止使用任何类型的硬编码明文凭据。此库允许您以加密字符串的形式存储 .env
中的值,同时仍然可以透明地访问它们,无需担心实现自己的加密方法。
安装
下载 Composer 包
您可以使用命令行上的 Composer require
调用轻松安装库
composer require psecio/secure_dotenv
生成密钥
首先,您需要生成加密密钥。此库使用 defuse/php-encryption 库进行加密处理。
php vendor/bin/generate-defuse-key
这将生成一个用于 php-encryption
库默认加密的随机字符串。此字符串应放置在脚本可以访问的文件中。
注意:根据安全最佳实践,此密钥文件应保持在文档根目录之外(不可通过网页访问),但应由网页服务器用户(或执行用户)可读。
创建 .env
文件
然后您需要创建要放置值的 .env
文件
touch /project/root/dir/.env
加载值
有了密钥文件和 .env 文件,现在可以创建一个新的实例,用于读取加密值
<?php require_once __DIR__.'/vendor/autoload.php'; $keyfile = __DIR__.'/keyfile'; $envFile = __DIR__.'/.env'; $d = new \Psecio\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 \Psecio\SecureDotenv\Parser($key, $envFile); ?>
这可以用来帮助防止密钥被 本地文件包含攻击 读取。
如果您的 .env
文件中目前有未加密的值,库将传递它们,并直接从 .env
配置返回纯文本版本。
设置值
您还可以使用 Parser
类上的 save()
方法动态地将值设置到您的 .env
文件中
<?php require_once __DIR__.'/vendor/autoload.php'; $keyfile = __DIR__.'/keyfile'; $envFile = __DIR__.'/.env'; $d = new \Psecio\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/psecio/secure_dotenv/bin/encrypt --keyfile=/path/to/keyfile
此工具将询问有关 .env
文件位置和要设置的密钥/值对的几个问题。完成后,它将写入新的、加密的值到 .env
文件。如果配置中已设置值且您想覆盖它,请使用 encrypt
脚本的 --override
命令行标志。