NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Attributes for Laravel

Šifrované hodnoty

Označte definíciu cez encrypted: true a jej hodnota sa pri uložení transparentne zašifruje cez Crypt a pri čítaní dešifruje. Funguje pre každý typ; hodnoty null cez Crypt nikdy neprechádzajú:

Attributes::define(new AttributeDefinitionData('token', AttributeType::String_, encrypted: true));

Attributes::for($product)->set('token', 'secret');
Attributes::for($product)->get('token'); // 'secret' (DB column holds ciphertext)

Rovnaký príznak funguje v definíciách v konfigurácii aj v schémach modelov:

// config/attributes.php — or a model's $attributeDefinitions
'definitions' => [
    'api_token'  => ['type' => 'string', 'encrypted' => true],
    'birth_date' => ['type' => 'datetime', 'encrypted' => true],
],

Ako to funguje

  • Hodnota sa najprv prevedie na uložený reťazec a až potom zašifruje cez Crypt v Laraveli — typ tak zostane zachovaný.
  • Každý riadok nesie príznak is_encrypted a čítanie dešifruje podľa riadku, nie podľa aktuálnej definície. Zapnutie šifrovania neskôr ovplyvní len hodnoty zapísané potom; staršie riadky sa naďalej čítajú správne.
  • Hodnoty sa šifrujú kľúčom aplikácie, preto musí byť APP_KEY nastavený všade, kde sa atribúty čítajú alebo zapisujú.
  • Jedinečnosť funguje ďalej: šifrovaná jedinečná hodnota sa indexuje kľúčovaným slepým indexom odvodeným z APP_KEY, nikdy otvoreným textom.
  • Revízie ukladajú šifrový text, takže auditná stopa nikdy nevyzradí tajomstvá.
  • php artisan about vypisuje definície len ako počet, takže názvy šifrovaných atribútov sa v diagnostike neobjavia.

Obmedzenia

Šifrový text je nedeterministický, preto šifrované hodnoty query scopy nedokážu porovnať, ohraničiť ani zoradiť. Scopy na prítomnosť, napríklad whereHasAttribute(), fungujú ďalej a rovnako aj unique:

use RoundlyConsulting\Attributes\DataTransferObjects\AttributeDefinitionData;
use RoundlyConsulting\Attributes\Enums\AttributeType;
use RoundlyConsulting\Attributes\Enums\UniqueScope;
use RoundlyConsulting\Attributes\Facades\Attributes;

Attributes::define(new AttributeDefinitionData(
    'national_id',
    AttributeType::String_,
    unique: UniqueScope::Global_,
    encrypted: true,
));

Attributes::for($a)->set('national_id', 'AB123');
Attributes::for($b)->set('national_id', 'AB123'); // throws DuplicateAttributeValueException

Rotácia APP_KEY zmení kľúč slepého indexu — šifrované jedinečné hodnoty potom uložte znova.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.