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

Sentinel odhaľuje; databázové oprávnenia a row-level security zabraňujú. Jedno dopĺňa druhé — Sentinel vám povie, že zapečatená hodnota, pečať alebo história za ňou sa zmenila mimo aplikácie, a odmietne na nej stavať, kým zmenu niekto neschváli.

Aktéri

IdAktérSchopnostiV rozsahu
A1Zapisovateľ do DBINSERT/UPDATE/DELETE v ľubovoľnej tabuľke vrátane sentinel_*; bez spúšťania kódu; bez prístupu k env, konfigurácii či APP_KEY.áno
A2Zapisovateľ do DB + obnova snapshotuA1 + nahradenie tabuliek alebo celej databázy starším snapshotom.áno (plné pokrytie vyžaduje kotvy)
A3Útočník v sieti / klientPrehráva, mení alebo duplikuje HTTP požiadavky.áno
A4Oprávnený insiderPoužíva aplikáciu bežne (napr. potvrdzuje zmeny).auditovaný (aktér + dôvod + zmenené atribúty v denníku chránenom MAC); autorizácia je úlohou aplikácie (Gate hook)
A5Držiteľ podpisových kľúčov / APP_KEY (kľúče drivera database) / RCE / zápis do konfigurácieDokáže sfalšovať čokoľvek.mimo rozsahu

Matica detekcie

„Okno“ je čas od posledného kontrolného bodu — predvolene sa plánuje každú minútu.

#ÚtokLen DB (bez kotvy)S ≥ 1 externou kotvouStav / zistenie
1Zmena zapečateného stĺpcaánoánoTampered (+ zmenené atribúty cez značky polí)
2Zmena riadkov, z ktorých sa počíta vypočítaná hodnotaánoánoTampered
3Skopírovanie hodnôt + pečate z iného riadku / modelu / názvu pečate / scope tenanta / kontextu aplikácieáno (doménová separácia)ánoTampered
4Presmerovanie riadku pečate (sealable_id, seal)ánoánoTampered
5Zmazanie riadku pečateánoánoMissing (seal_deleted, ak existuje história v denníku)
6Vloženie nezapečateného riadku (striktná pečať)ánoánoMissing (never_sealed); benevolentná pečať → Unsealed (z definície nejde o zistenie)
7Obnova staršieho riadku + jeho staršieho riadku pečateáno, kým existujú novšie záznamy denníkaánoStale (newer_version)
8#7 + zmazanie novších záznamov denníkaáno, ak už boli v kontrolnom bode (CheckpointMismatch); vnútri okna nieáno mimo oknazistenia v denníku
9Obnova celej databázy (vrátane denníka a kontrolných bodov) zo staršieho snapshotunieáno (AnchorAhead) pri každom návrate za posledný ukotvený kontrolný bodzistenie v denníku
10Zmazanie konca kontrolných bodov (+ záznamov)nieánoAnchorAhead
11Prepísanie záznamu denníka alebo kontrolného boduáno (MAC záznamu / MAC kontrolného bodu + reťaz)ánoEntryInvalid, CheckpointInvalid, ChainBroken
12Zmazanie zapečateného riadku bez tombstonuáno (sentinel:verify --ledger: živá hlava denníka, riadok chýba)ánoEntityDeleted
13Prepísanie uloženého algorithm / key_id / ring v riadku pečateáno (algoritmus určuje kľúč; allowlist kruhov; HKDF info viaže ring + kid + algoritmus)ánoAlgorithmMismatch / UnknownKey / Tampered
14Riadky kľúčov drivera database: zámena ring/kid/algoritmu, výmena verejného kľúča, podstrčenie obálky vytvorenej cez cast encryptedáno (AEAD obálka pod vlastným kľúčom odvodeným z APP_KEY viaže každé pole aj svoj riadok)ánoKeyIntegrityException → UnknownKey
15Riadky kľúčov drivera database: obnova staršej obálky (zrušenie odvolania)nie (autentický starý šifrový text) — náprava: uveďte kid v SENTINEL_REVOKED_KEYS, ktoré má vždy prednosťnie—
16Zmeny vykonané a vrátené celé vnútri oknanienie— (skráťte interval kontrolných bodov)
17Prehratie podpísanej HTTP požiadavkyáno (okno created/expires + deduplikácia nonce)—replayed, too_old, expired
18Zmena tela či hlavičiek podpísanej požiadavky alebo pridanie prepisu metódyáno (content-digest + podpis; vykonaná metóda musí byť tá podpísaná)—digest_mismatch, invalid_signature, malformed
19Duplicitný POST (búrka opakovaní, dvojklik)áno (prehratie / 409)—idempotencia
20Opätovné použitie idempotenčného kľúča s iným obsahománo (422)—idempotencia
21Opätovné použitie jednorazovej URLáno (atomické spotrebovanie)—403

Čo negarantuje

  • Sentinel odhaľuje, nezabraňuje. Riadok môže byť zmenený medzi dvoma overeniami.
  • Riadky zapísané cez query builder, surové SQL alebo withoutSealing() sú nezapečatené alebo zastarané, kým sa znovu nezapečatia. Striktné pečate ich nahlásia.
  • Kľúče drivera database sú len také bezpečné ako APP_KEY. Driver config drží kľúče mimo databázy — odporúča sa pre predvolený kruh.
  • Bez externej kotvy sa návrat celej databázy (#9) a orezanie kontrolných bodov (#10) odhaliť nedajú.
  • Overenie dokazuje integritu voči poslednej autorizovanej pečati, nie to, že autorizovaná hodnota bola správna.
  • Vypočítané hodnoty zo súvisiacich riadkov sú len také čerstvé ako posledné prepečatenie modelu, ktorý ich vlastní.

Zámerne mimo rozsahu: dôvernosť (použite casty encrypted v Laraveli), útočník s podpisovými kľúčmi, APP_KEY (pre kľúče drivera database), nasadeným kódom alebo konfiguráciou, a zachytávanie zápisov cez query builder či surové SQL — tie sa odhalia dodatočne.

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.