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

Kanonický formát

Toto sú presné bajty, ktoré Sentinel chráni MAC alebo podpisuje. Formát je zmrazený: každá zmena vyjde ako sentinel.seal/2 popri verzii 1, overovače si ponechajú kód pre každý starší formát a súbor testovacích vektorov so známou odpoveďou zastaví build pri akejkoľvek odchýlke. Záleží na tom preto, lebo pečať sa dá overiť aj mimo Sentinelu — skriptom audítora, v inom jazyku — a pečať zapísaná na SQLite sa overí na PostgreSQL aj MySQL.

Pečatí sa to, čo drží databáza

Hodnoty atribútov sa z databázy čítajú vždy v surovom tvare drivera — pri pečatení cez SELECT … FOR UPDATE v pečatiacej transakcii po zápise aplikácie, pri overovaní novým dopytom alebo zo surových pôvodných atribútov načítaného modelu. Pokryté sú teda aj predvolené hodnoty databázy, triggery a generované stĺpce a zápis aj spätné načítanie sú zo svojej podstaty totožné: preusporiadanie jsonb, doplnenie numeric, afinita REAL v SQLite, reprezentácia booleanov ani zaokrúhľovanie dátumov nikdy nespôsobia planý poplach.

Normalizácia podľa tagu

Každé pravidlo radšej odmietne výnimkou CanonicalizationException, než by hádalo. Null si ponechá deklarovaný tag, takže null ≠ '' ≠ '0' ≠ 0 ≠ false:

TagKanonická hodnotaOdmietne
strPresné bajty; musia byť platné UTF-8.neplatné UTF-8 (invalid_utf8) — deklarujte binary()
intDesiatkové číslo bez + a úvodných núl; -0 → 0; ľubovoľná dĺžka sa zachová presne.čokoľvek iné (not_integer)
dec:NZnamienko + celá časť + . + presne N číslic; float sa zmení na najkratšie presné číslice, nikdy nie exponent; -0.00 → 0.00.viac než N nenulových desatinných číslic (not_representable), NaN/INF, reťazce s exponentom
flt:NZaokrúhlené half-even na N, oddeľovač ., bez oddeľovača tisícov (stratové z definície).NaN/INF
bool'1' / '0'čokoľvek okrem bool, 0/1, t/f, true/false (not_boolean)
dtHodnota bez zóny sa berie tak, ako je zapísaná (Y-m-d\TH:i:s.uuuuuu); hodnota s posunom sa prevedie na UTC (…\Z). Tieto dva tvary sa nikdy nezhodujú.nečitateľné (invalid_datetime)
dateY-m-d pre dátum alebo polnoc; iný čas sa zachová v tvare dt.invalid_date
jsonJCS dekódovanej hodnoty (veľké celé čísla ako reťazce, hĺbka ≤ 64).neplatný JSON (invalid_json), hĺbka > 64
binbase64url—
autoint → int, bool → bool, string → str, null → null.float (float_requires_declaration)

Dokument pečate

{"alg":"hmac-sha256","at":"2026-10-02T18:30:00.000000Z","ctx":"","f":[["a:amount","dec:2","10.50"],["a:paid","bool","1"],["a:status","str","paid"],["c:lines","json","[{\"qty\":1,\"sku\":\"A-1\"}]"]],"id":"42","kid":"default-20261002-k3f9qa","prev":null,"ring":"default","scope":"","seal":"financial","table":"invoices","type":"App\\Models\\Invoice","v":"sentinel.seal/1","ver":"7"}
  • Členy (všetky reťazce alebo null, kľúče v poradí JCS): alg, at (sealed_at v UTC s mikrosekundami), ctx (sentinel.context), f (n-tice polí zoradené podľa názvu), id, kid, ring, prev (base64url SHA-256 z MAC predošlej pečate, alebo null), scope, seal, table (bez prefixu), type (morph trieda), v = sentinel.seal/1 a ver.
  • Vstupom MAC sú UTF-8 bajty tohto JCS textu — RFC 8785 s presnými celými číslami namiesto zaokrúhľovania nad 2⁵³.
  • Doménová separácia viaže riadok, model, tabuľku, pečať, scope tenanta, kontext aplikácie, verziu aj reťaz; ostatné dokumenty majú vlastné v (sentinel.seal-attributes/1, sentinel.ledger/1, sentinel.checkpoint/1, sentinel.field/1, sentinel.anchor/1) a reťazce HKDF info sa líšia podľa účelu.
  • Neviaže sa: názov pripojenia, ktorý je citlivý na premenovanie — pri databáze na tenanta použite scope().

Značky polí

Každá značka poľa je prvých 16 bajtov HMAC-SHA-256 nad identitou a hodnotou poľa, zakódovaných v base64url a uložených ako field_tags. Vznikajú len pri kľúčoch HMAC so zapnutými značkami polí; asymetrické pečate ukladajú null. Pri neplatnom MAC sú zmenenými atribútmi názvy, ktorých prepočítaná značka sa líši. Úprava značiek len zavádza diagnostiku — žiadne rozhodnutie sa na nich nezakladá: či sa posunuli len vypočítané hodnoty, dokazuje samostatný MAC atribútov.

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.