staabm/secure_dotenv

加密环境配置处理器

资助包维护!
staabm

10.0.2 2024-01-24 17:26 UTC

This package is auto-updated.

Last update: 2024-09-22 08:07:13 UTC


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 创建。