martin3r/platform-core
Composer 安装命令:
composer require martin3r/platform-core
包简介
Plattform Core Package
README 文档
README
Diese Bausteine stellen modulübergreifend sichere Feldverschlüsselung und Hashing bereit.
Überblick
- Casts
Platform\Core\Casts\EncryptedString– verschlüsselt/entschlüsselt Strings transparentPlatform\Core\Casts\EncryptedJson– verschlüsselt/entschlüsselt JSON (Array)
- Trait
Platform\Core\Traits\Encryptable– richtet Casts ein und pflegt automatisch<feld>_hashbeim Speichern
- Helper
Platform\Core\Support\FieldHasher– HMAC-SHA256 Hashing (mit optionalem Team-Salt), inkl. Key-Rotation
- Konfiguration
config/security.php– Schlüssel für Verschlüsselung/Hashing und Rotation
Verwendung in Modellen
- Felder definieren (z. B. in einem Modul-Model):
use Platform\Core\Traits\Encryptable; class CustomerSecret extends Model { use Encryptable; protected array $encryptable = [ 'iban' => 'string', 'api_token' => 'string', 'meta' => 'json', ]; }
- Migration im Modul:
Schema::table('customers', function (Blueprint $table) { $table->text('iban')->nullable(); $table->char('iban_hash', 64)->nullable()->index(); $table->text('api_token')->nullable(); $table->char('api_token_hash', 64)->nullable()->index(); $table->longText('meta')->nullable(); });
- Suche über Hash statt Klartext:
use Platform\Core\Support\FieldHasher; $teamSalt = (string) auth()->user()?->currentTeam?->id; $hash = FieldHasher::hmacSha256($ibanImKlartext, $teamSalt); $customer = CustomerSecret::where('iban_hash', $hash)->first();
Schlüsselrotation
.env:HASH_KEY=stable-hash-key(optional; Fallback istAPP_KEY)PREVIOUS_HASH_KEYS=oldHashKey1,oldHashKey2PREVIOUS_ENCRYPTION_KEYS=oldEncKey1,oldEncKey2
- Verhalten:
- Casts versuchen Entschlüsselung mit aktuellem
APP_KEY, dann mitPREVIOUS_ENCRYPTION_KEYS. FieldHasher::matchesAny($value, $teamSalt, config('security.previous_hash_keys'))liefert Hashes für aktuelle und alte Keys (für Migrations-/Vergleichslogik).
- Casts versuchen Entschlüsselung mit aktuellem
Hinweise & Best Practices
- Verschlüsselte Felder als
text/longTextspeichern. - Für Indizes/Suche ausschließlich Hash-Spalten (
*_hash) verwenden; niemals Klartext indizieren. - Team-/Mandantensalt: Wenn möglich
team_idals Salt nutzen, um Hashes teambezogen zu entkoppeln. - Maskierung (UI/Logs): Bei Bedarf zusätzliche Helper ergänzen (z. B. IBAN-Maskierung).
统计信息
- 总下载量: 1k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: Unknown
- 更新时间: 2025-07-29