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

Obsah a retencia

Nedôveryhodný vstup

Prichádzajúci obsah sú dáta, ktoré zvolil cudzí s URL adresou — a pri overenom doručení aj s tajným kľúčom. Dekóduje sa len do polí, nikdy do objektov, s hĺbkou ≤ 64 a veľkými číslami ako reťazcami, a balík nikdy nevolá unserialize(), eval() ani extract(). V handleri hodnoty pred použitím overte, každú hodnotu použitú ako názov triedy, cestu k súboru, URL alebo časť dopytu skontrolujte voči zoznamu povolených a nikdy ju neposielajte do unserialize().

Sanitizér

Contracts\PayloadSanitizer::sanitize(array $payload, SanitizeContext $context): array beží nad prichádzajúcim obsahom predtým, ako sa uloží, odovzdá udalosti a handleru alebo vykreslí. Predvolený Support\KeyRedactingSanitizer nahradí hodnotu každého kľúča zo sanitizer.redact_keys (bez ohľadu na veľkosť písmen, v ľubovoľnej hĺbke do 64) hodnotou sanitizer.replacement. Vymeníte ho cez sanitizer.class:

use RoundlyConsulting\Webhooks\Contracts\PayloadSanitizer;
use RoundlyConsulting\Webhooks\DataTransferObjects\SanitizeContext;

final class DropCardData implements PayloadSanitizer
{
    public function sanitize(array $payload, SanitizeContext $context): array
    {
        // $context->direction (Direction::Inbound), $context->endpoint, $context->eventType
        unset($payload['data']['card']);

        return $payload;
    }
}

// config/webhooks.php
'sanitizer' => ['class' => DropCardData::class, /* … */],

Sanitizér, ktorý vyhodí výnimku, doručenie odmietne s 500 sanitizer_failed (a nahlási ho): nič nesanitizované sa nikdy neuloží a id doručenia sa uvoľní, takže opakovanie od odosielateľa sa prijme, keď sanitizér funguje — pri RFC 9421 aj nezmenené opätovné odoslanie. Odchádzajúce telá sa posielajú bez zmeny; sú to vaše vlastné dáta.

V pokoji

  • Prichádzajúce: sanitizovaný dekódovaný obsah (nikdy surové telo), payload_bytes a payload_digest (SHA-256 surového tela) a hlavičky z inbound.store_headers — podpisové, prihlasovacie a cookie hlavičky sa nikdy neukladajú bez ohľadu na zoznam.
  • Odchádzajúce: presné telo odoslané pri každom pokuse.
  • So zapnutým payloads.encrypt sa oboje šifruje kľúčom aplikácie; každý riadok si pamätá, ako bol zapísaný, takže zmena nastavenia nikdy nespraví staršie riadky nečitateľnými.

Retencia

ČoKedy
Obsah prichádzajúcich a telá odchádzajúcich ukončených doručení, výňatky odpovedí pokusov → vymazané (payload_pruned_at)Staršie ako payloads.retention_days (30)
Prichádzajúce doručenia, ukončené odchádzajúce doručenia a ich pokusy → natrvalo zmazanéStaršie ako payloads.delivery_retention_days (90; null = ponechať)
Vyradené tajné kľúče po prechodnom období → vymazanéVždy
Mäkko zmazané endpointy, na ktoré už neukazuje žiadne doručenie → natrvalo zmazanéZmazané pred viac ako delivery_retention_days (null = ponechať)
$result = Webhooks::prune(new PruneOptions(dryRun: true));   // counts only, changes nothing

$result->total();
$result->inboundPayloads;     // also: outboundBodies, attemptBodies, inboundDeliveries, outboundDeliveries, attempts, expiredSecrets, endpoints

PruneOptions(bool $dryRun = false, ?CarbonInterface $now = null) — now posunie hranicu, napríklad pre doplnenie údajov alebo test. Čistenie beží po dávkach a vráti PruneResult s počtami podľa druhu. Vyčistené doručenie nemožno znova spracovať ani opätovne doručiť (PayloadPrunedException). Provider ho plánuje denne (schedule.prune); z konzoly:

php artisan webhooks:prune --dry-run

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.