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

Tajomstvá mimo stack trace

PHP skryje argument v stack trace len v rámci funkcie, ktorá ho označí #[\SensitiveParameter]. Balík preto označuje každý rámec, ktorým tajomstvo prechádza, nielen vstupný bod — výnimka vyhodená hlboko vo verifieri, kódeku či loaderi tak do vašich logov a hlásení chýb nikdy neprenesie kľúč, token ani tajný kľúč OTP.

Čo je označené

  • Kľúče, tajné kľúče, peppery a súkromné PEM, tajné kľúče a kódy OTP a otvorený text odovzdaný do Aes256Gcm.
  • Oba vstupy ConstantTime::equals() a Crypto::constantTimeEquals(), tak ako PHP označuje oba vstupy hash_equals() — očakávaná hodnota je samotné tajomstvo, MAC, token či OTP.
  • Kompaktný token v Jws::verify(), pretože JWS je zvyčajne bearer token, ktorý sám osebe oprávňuje na prístup.
  • Každý podpis, HMAC aj podpis verejným kľúčom, v každom rámci, ktorý ho dostane celý: Hmac::verify(), Hs::verify(), Rs::verify(), Es::verify(), EdDSA::verify(), kontrakt Verifier, KeyVerifier::verify() (Crypto::verifier()), kódek ECDSA (Crypto::ecDer()->fromRaw() / toRaw() / isValid()) a konštruktor FlattenedJws. Rámec overenia JWS drží aj podpisovaný vstup (header.payload) a spolu s podpisom z nich znova poskladáte bearer token.
  • Dáta odovzdané do Digest::raw(), hex() a withPepper() — tokeny, heslá, osobné údaje.
  • Vstup každého kódeku — Base32, Base64, Base64Url, Hex a metódy Crypto::*Encode() / *Decode() — keďže cez ne prechádzajú tajné kľúče OTP, bajty tokenov aj kľúče. Tajný kľúč OTP skopírovaný s medzerami, ktorý sa nepodarí dekódovať, sa tak nikdy neobjaví v stack trace Totp::verify(), Hotp::at() ani ProvisioningUri::totp().
  • Vstup každého loadera verejného materiálu: RsaKey::public(), EcKey::public(), OkpKey::ed25519(), Jwk::fromArray() / fromJson(), Certificate::fromPem() / fromDer() / fromBase64() a Chain::fromPems() / fromX5c() / fromPemBundle() vrátane ich podôb cez Crypto::keys() a Crypto::x509(). Súkromné kľúče prichádzajú v tých istých formátoch, takže kľúč odovzdaný omylom — nesprávny súbor, balík len s kľúčom, súkromný či symetrický JWK — zostane mimo stack trace výnimky, ktorá ho odmietne.

Označené nie sú: správy, ktoré podpisujete, overujete alebo z ktorých počítate MAC (samotný podpisovaný vstup k prístupu neoprávňuje), šifrový text, nonce, pridružené dáta, objekty verejných kľúčov, jednotlivé zložky kľúča (súradnice EC, modul či exponent RSA), vstup COSE_Key / CBOR z autentifikátora (WebAuthn vám súkromný kľúč nikdy neodovzdá) a argumenty s algoritmom, dĺžkou, menovkou (label), diskom, cestou či konfiguračným kľúčom. Označenú množinu stráži architektonický test.

Aj ploché volania fasády

Štandardný rámec Facade::__callStatic() v Laraveli zaznamená každý argument, ktorý posúva ďalej. Fasáda Crypto ho nahrádza traitom RedactsSensitiveArguments z package-toolkit, ktorý v tomto rámci obalí každý argument označený v manažéri do SensitiveParameterValue a ostatné nechá viditeľné. Crypto::constantTimeEquals($known, $user), Crypto::base64Decode($secret), Crypto::provisioningUri($secret, …) aj skratky loaderov Crypto::jwkFromJson() / jwkFromArray(), Crypto::certificate() a Crypto::chainFrom*() tak držia tajomstvo mimo stack trace rovnako ako trieda, vnorený prístup či injektovaný CryptoManager. Volania, ktoré najprv vrátia objekt, napríklad Crypto::totp()->verify($secret, $code), tajomstvo cez fasádu vôbec neposúvajú.

Vlastný Verifier

PHP atribút #[\SensitiveParameter] z rozhrania nededí. Verifier, ktorý implementujete sami, musí svoj parameter $signature označiť sám — tak ako to robí kontrakt aj každý verifier balíka. Pozrite si časť Podpisy a algoritmy.

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.