psecio / secure_dotenv
加密环境配置处理器
Requires
- php: >=7.1
- defuse/php-encryption: ^2.2
- enygma/cmd: ^0.4.0
- league/climate: ^3.4
Requires (Dev)
- phpunit/phpunit: ^7.1
README
secure_dotenv
库提供了一种简单的方式来处理 .env
文件中信息的加密和解密。
一般公认的安全最佳实践之一是防止使用任何类型的硬编码明文凭证。这个库允许你以加密字符串的形式存储 .env
中的值,但仍能透明地访问它们,而无需担心实现自己的加密方法。
安装
下载 Composer 包
您可以通过命令行上的 Composer require
调用轻松安装此库
composer require psecio/secure_dotenv
生成密钥
首先,您需要生成加密密钥。该库使用 defuse/php-encryption 库来进行加密处理。
php vendor/bin/generate-defuse-key
这将生成一个用于与 php-encryption
库默认加密一起使用的随机字符串。此字符串应放置在脚本可以访问的文件中。
注意:根据安全最佳实践,此密钥文件应保持在与文档根目录之外(不可通过网络访问),但应由 web 服务器用户(或执行用户)可读。
创建 .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
文件中。如果您想覆盖已设置的配置值,请使用带有 --override
命令行标志的 encrypt
脚本。