基本上,我想保护数据库连接和其他AWS信息。下面是 laravel .env 的示例文件
APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
现在可以从 Laravel 9.32 开始。 https://github.com/laravel/framework/pull/44034#issue-1364610312
env运行
php artisan env:encrypt
将在项目的根目录中查找.env
文件,获取文件的内容,使用新密钥对其进行加密并将其另存为.env.encrypted
。 解密密钥与使用的密码和加密文件的路径一起显示在命令的输出中。
:decrypt 命令解密加密环境文件的内容,并将输出写入所选环境的 .env。 运行此命令需要解密密钥。
php artisan env:decrypt --key=h9kAPUmxdZ8ZbwT3
上面提供的问题链接中提到了更多加密和解密选项。
选项 1。使用这样的东西(GitHub Laravel Encryptenv(。
您的里程可能会有所不同,因为它并不容易维护和设置。
选项 2.烹饪上述的变体(但更简单(。在您的配置/数据库.php文件中:
use IlluminateEncryptionEncrypter;
$key = getenv('SECRETKEY');
$encrypter = new Encrypter($key, 'aes-128-cbc');
//...
'mysql' => [
//...
'password' => $encrypter->decrypt(env('DB_PASSWORD', '')),
显然,SECRETKEY是一个保存解密密钥的环境变量。
您可能会问"我从哪里获得解密密钥SECRETKEY?
一种选择是通过您的Web服务器注入它,例如在您的nginx配置中,在sites-enabled/001-yoursite.conf配置中:
location ~ .php$ {
set $script_filename $document_root$fastcgi_script_name;
set $configkey "";
if ($script_filename = "/var/www/yoursitepath/html/public/index.php") {
set $configkey "AAAAAAAAAAAAAAAA";
}
fastcgi_param SCRIPT_FILENAME $script_filename;
fastcgi_param CONFIGKEY $configkey;
其中"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA如果您想要更大的密钥(以及更可疑的安全性(,请随意切换到AES-256-CBC。
以上仅提供您的 Laravel 索引.php文件的密钥。这种限制的原因是,任何可以在您的 webroot 中创建 PHP 文件的人都可以打印密钥的值,因此您的整个纸牌屋都会崩溃。
为了使上述内容具有任何有意义的保护:
- 您必须将 nginx 配置文件 001-yoursite.conf 限制为只能由 root 读取。
- 您必须禁止任何人修改索引.php(chmod 440 索引.php(。如果您允许常规系统用户修改您的索引.php,他们将能够轻松打印出您的"密钥"。
上述"加密"只能防止肩膀冲浪攻击之类的东西,绝不是适当的安全措施的替代品,例如仔细配置您的 webroot、强化等。
以上主要适用于需要让合规 beancounter 满意的场景。