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

Bezpečné zachytenie about

Zachytí jednu sekciu artisan about a overí, že vykreslí, čo má, a neprezradí žiadne z tajomstiev, ktoré prezradiť nesmie:

expect($section)->toLeakNoSecrets(array $secrets, array $mustRender);
expect('passkeys')->toLeakNoSecrets(
    secrets: ['auth.acme-internal.example', '/srv/acme/secrets', 'ea9b8d66'],
    mustRender: ['Sign-count policy', 'AAGUID allow-list'],
);
ParameterTypVýznam
$sectionstringSekcia odovzdaná príkazu artisan about --only=<section>.
$secretslist<string>Hodnoty, ktoré sa nesmú vykresliť — kľúče, cesty, hostitelia, odtlačky. Každá položka musí byť neprázdny reťazec; prázdny zoznam je zámerná kontrola len vykreslenia.
$mustRenderlist<string>Reťazce, ktoré sa vykresliť musia — pozitívny dôkaz, že zachytenie funguje. Povinné, neprázdne a každá položka neprázdny reťazec.

Poradie krokov

  • Najprv musí byť výstup neprázdny.
  • Potom musí byť prítomný každý reťazec z $mustRender.
  • Až potom sa overí, že sa nevykreslí žiadna položka z $secrets.

Zachytenie ide cez Artisan::call('about', ['--only' => $section]) a Artisan::output(). Nikdy nečíta app(Kernel::class)->output(), ktoré vracia prázdny reťazec — práve tak kedysi celá sekcia kontrol „nič neuniká“ prechádzala naprázdno a únik sa odhalil len vďaka jednej náhodnej pozitívnej asercii. Prázdne $mustRender vyhodí InvalidArgumentException už pri volaní, pretože čisto negatívna kontrola môže prejsť aj nad prázdnym výstupom.

Každá položka musí byť nastavená

Každá položka oboch zoznamov musí byť neprázdny reťazec, inak volanie vyhodí InvalidArgumentException. Tajomstvo s hodnotou null — config('a.key.that.is.not.set') — alebo prázdne z nenastavenej premennej prostredia sa nedá nájsť, takže kontrola úniku by prešla bez toho, aby niečo overila; prázdny reťazec v $mustRender sa zase nájde v každom výstupe. Tajomstvo preto v teste najprv nastavte na skutočnú hodnotu.

V aplikácii

it('does not leak credentials through artisan about', function (): void {
    // Only a secret that is set can be looked for — a null or empty entry throws.
    config(['services.stripe.secret' => 'sk_test_do_not_render_me']);

    expect('environment')->toLeakNoSecrets(
        secrets: [config('app.key'), config('services.stripe.secret')],
        mustRender: ['Application Name'],
    );
});

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.