henzeb / laravel-encrypted-data-rotator
旋转加密数据。
Requires
- php: ^8.1
- haydenpierce/class-finder: ^0.5.3
- illuminate/support: ^11.0
Requires (Dev)
- calebporzio/sushi: ^2.5
- infection/infection: ^0.29
- orchestra/testbench: ^9.0
- pestphp/pest: v2.31
This package is auto-updated.
Last update: 2024-09-08 06:29:07 UTC
README
Laravel 11自带应用密钥旋转功能。遗憾的是,在这个阶段,laravel不会重新加密数据,除非用户更改它。
此包允许您默认旋转模型,但也可以让您旋转自己的自定义加密数据。
安装
只需使用以下命令安装。
composer require henzeb/laravel-encrypted-data-rotator
用法
配置
当您只想旋转模型时,无需进行任何修改。所有操作都将自动为您完成。大多数操作可以通过环境变量进行配置。
发布配置
配置文件可以通过以下命令发布
php artisan vendor:publish --tag=rotator
旋转密钥
Laravel没有自带方便的密钥旋转命令,您需要手动在APP_PREVIOUS_KEYS
变量中保存密钥,您可能会忘记,或者简单地出错。
php artisan key:rotate
您还可以选择不同的环境。
php artisan key:rotate --env your-env
在生产环境中,如果您想要旋转密钥,将被要求确认。您可以强制执行此操作。
php artisan key:rotate --force
旋转数据
当您旋转了密钥后,加密数据尚未更改。如果当前密钥无法解密数据,Laravel将使用之前的密钥。使用以下命令数据也会被旋转。
php artisan key:rotate-data
对于模型,您无需做任何事情。模型及其加密属性将自动检测。
注意:就像密钥旋转命令一样,key:rotate-data
接受env
来指定环境,以及force
来开始旋转而无需确认。
旋转转换器
如果您在模型中有处理加密数据的转换器,希望它们也被旋转。对于这些情况,您可以使用属性EncryptsData
。然后key:rotate-data
命令将检测转换器并旋转其数据。
use Henzeb\Rotator\Attributes\EncryptsData; #[EncryptsData] public function myAttribute(): Attribute { return Attribute::set( fn($value) => encrypt($value) )->get(fn($value) => decrypt($value)); }
旋转自定义属性转换
可以旋转自定义转换。您的CastsAttributes
实现应该在其类名中包含encrypted
,或者实现Henzeb\Rotator\Contracts\CastsEncryptedAttributes
接口。
use Henzeb\Rotator\Contracts\CastsEncryptedAttributes; use Illuminate\Contracts\Database\Eloquent\CastsAttributes; class YourCustomAttribute implements CastsAttributes, CastsEncryptedAttributes { // your implementation }
注意:这同样适用于CastsInboundAttributes
实现
旋转自定义加密数据
要旋转模型无法访问的加密数据,您可以在\Henzeb\Rotator\Contracts\RotatesEncryptedData
接口上实现rotateEncryptedData
方法。当应用默认配置时,这些实现也会自动检测。
在模型上自定义旋转
RotatesEncryptedData
接口也可以应用于模型。这些是per-record
基础。
事件
对于每个处理的模型,将发出一个ModelEncryptionRotated
事件。它包含模型以便于访问。
注意:对于自定义实现,没有事件。您必须自己实现它们。
队列
所有操作都利用队列完成。默认情况下,它使用默认队列和默认连接。您可以通过设置ROTATOR_QUEUE
和ROTATOR_QUEUE_CONNECTION
,或者在配置文件中的相应键来更改这些设置。
为了避免内存不足,给定队列中的作业数量通过ROTATOR_JOB_LIMIT
限制。每当队列大小过大时,RotateModelsWithEncryptedData
作业将被放回队列中,等待它已分发的作业完成。默认情况下为100个作业。
为避免数据库过载,您可以修改 ROTATOR_CHUNK_SIZE
。默认情况下,从您的数据库中取出50条记录并派送到队列。
清理之前的密钥
如果您定期轮换,或者您确信这些密钥不再需要,可以通过运行以下命令来简单地清理密钥
php artisan key:cleanup-previous-keys
注意:与其他命令一样,key:cleanup-previous-keys
接受 env
来指定环境,以及 force
来在不确认的情况下清理。
测试此包
composer test
贡献
有关详细信息,请参阅 CONTRIBUTING
安全
如果您发现任何与安全相关的问题,请通过电子邮件 henzeberkheij@gmail.com 联系,而不是使用问题跟踪器。
致谢
许可证
GNU AGPLv。有关更多信息,请参阅 许可证文件