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

Bezpečnosť

Každú vlastnosť nižšie pokrýva test v testoch balíka.

  • Enumerácia — verejné endpointy odpovedajú pre známe, neznáme, deaktivované aj neoverené účty rovnako (status aj telo) — v bezpečných režimoch aj registrácia, s registration.uniform_response v každom režime overenia; e-maily idú len skutočným aktívnym účtom, a to po odpovedi. Kontrola hesla prebehne vždy, pri neznámych účtoch voči fiktívnemu hashu s rovnakou náročnosťou, a prihlásenie heslom do uzamknutého účtu odpovie ako nesprávne heslo (rovnaký status, telo, náročnosť hashu aj započítanie do limitu); správne heslo za akýmkoľvek jednotným invalid_credentials si pokus v limite ponechá a počítadla uzamknutia sa nedotkne, rovnako ako nesprávne. Zmena e-mailu na obsadenú adresu odpovie aj upozorní starú adresu presne tak ako zmena na voľnú. Zariadenie sa stane známym len po dokončenom prihlásení — nie po odkaze na obnovu či prihlásenie vyžiadanom zo zariadenia ani po opätovnom overení (možno ukradnutým) prístupovým tokenom.
  • Izolácia guardov — token, odkaz, kód, pozvánka, výzva ani passkey jedného guardu nikdy nefungujú na inom.
  • Jednorazovosť — každé uplatnenie je podmienený update; výzvy postupujú s optimistickou kontrolou verzie a uchovávajú snímku verzie tokenu účtu.
  • Invalidácia — tv++ zneplatní všetky existujúce prístupové tokeny; rodiny relácií sa zrušia (rodina vydaná pod staršou hodnotou tv — prihlásenie v súbehu s invalidáciou — pri prvej obnove, takže žiadna relácia neprežije obnovu hesla, deaktiváciu ani odhlásenie všade) a obnova zneplatní predošlý prístupový token relácie, takže zrušenie relácie zneplatní všetky tokeny, ktoré vydala; nevyužité odkazy na prihlásenie, obnovu, opätovné overenie a zmenu e-mailu zaniknú s nimi; denylist jti je poistka navyše.
  • Obmedzovanie pokusov — pokusy sa započítajú atomicky ešte pred overením hesla či kódu — limity prihlásenia, e-mailov a opätovného overenia, e-mailové kódy aj vlastné max_attempts každej výzvy — takže nával súbežných pokusov nemôže limit obísť. Limit výzvy platí pre jednu výzvu: pri vypnutom limite two-factor pre účet (two-factor.attempts = null) je jedinou hranicou a každé nové prihlásenie otvorí nový rozpočet pokusov, preto limit nechajte zapnutý alebo routy výziev obmedzte sami (authentication:check na to upozorní).
  • Dodatočné overenie pri riziku — require_second_factor platí pre každý spôsob prihlásenia, aj pri after_email_login = false; účet bez faktora na dodatočné overenie sa zamietne. Prihlásenie passkey, ktoré sa počíta ako MFA (passkeys.satisfies_mfa), už dodatočným overením je.
  • Opätovné overenie — účty s druhým faktorom sa musia overiť ním; dôkaz heslom či e-mailovým kódom ani prihlásenie, ktoré faktor preskočilo, im bránu nikdy nesplní — ani keď si faktor nastavili až po tomto dôkaze. reauthentication.methods sa overuje voči faktoru, ktorý sa skutočne zhodoval.
  • Tajomstvá v úložisku — HMAC-SHA-256 s kľúčom odvodeným z APP_KEY (alebo hash_key); otvorená podoba existuje len v odpovedi alebo notifikácii.
  • Predčasné prevzatie účtu — pri verification.secure_on_email_login prihlásenie magic linkom či e-mailovým kódom, ktoré overí neoverenú adresu, odstráni heslo, nastavenie dvojfaktora aj passkeys nastavené pred overením adresy a ukončí všetky relácie (AccountClaimed); uplatnenie je podmienený update v jednej transakcii s upratovaním a prihlásenie heslom v súbehu s ním dostane pár, ktorý sa odmietne.
  • Obnova účtu — ochrana posledného prihlasovacieho údaja, vynútené nastavenie faktora len pre overené adresy, zmena e-mailu overená a dvakrát oznámená, obnova hesla nikdy neobíde nastavený druhý faktor a registrácia nikdy nepreskočí povinné nastavenie dvojfaktora.
  • Prenos — Cache-Control: no-store na každej odpovedi balíka, šifrované frontované notifikácie a tajomstvá vo fragmentoch URL.
  • Stack trace — fasáda Authentication používa RedactsSensitiveArguments z package-toolkit, takže argumenty #[SensitiveParameter] metód consumeMagicLink() ($token), verifyEmailOtp() ($code) a refresh() ($refreshToken) sa aj vo vlastnom rámci fasády zobrazia ako SensitiveParameterValue, kým ostatné argumenty zostanú viditeľné.

Sprísnená predvoľba

Dnešné predvolené hodnoty zachovávajú správanie verzií 1.x/2.x. Medzery, ktoré nechávajú, uzavrú štyri nastavenia — sú to predvolené hodnoty plánované pre ďalšiu major verziu. Nastavte ich na guarde jednotlivo alebo všetky naraz cez GuardPreset::hardened() (pozri Konfigurácia):

KľúčDnesHardenedČo uzavrie
registration.uniform_responsefalsetrueRegistráciu, ktorá prezradí obsadenú adresu, keď by hneď prihlásila. Obsadená adresa dostane presne tú odpoveď ako voľná (accepted alebo verification_required, rovnaká náročnosť hashu) a jej držiteľ upozornenie o existujúcom účte; registrácia nikdy neprihlási.
verification.modeoptionalrequired_for_loginPrihlasovanie neoverených účtov — zaregistrovať ľubovoľnú adresu môže ktokoľvek.
verification.secure_on_email_loginfalsetruePredčasné prevzatie účtu: prihlasovacie údaje nastavené pred overením adresy prežijú prvé e-mailové prihlásenie jej vlastníka. verify_on_email_login zostáva true, čo potrebuje.
lockout.enabledfalsetrueNeobmedzené pomalé hádanie hesla z rôznych IP nad rámec limitov. Daň: účet môže ktokoľvek zámerne uzamknúť neúspešnými pokusmi — vlastník dostane upozornenie a lockout.reset_unlocks dovolí zámok zrušiť obnovou hesla.

Predvoľba nastaví aj verification.verify_on_email_login = true. Všetko ostatné je bezpečné už predvolene — jednotné zamietnutie pri riziku, reveal_account_state až po overenom prvom faktore, URL s fragmentom, kontroly adresy pozvánky.

Poznámky k prechodu na ďalšiu major verziu

Ďalšia major verzia urobí zo štyroch sprísnených hodnôt predvolené. Ak si chcete po prechode ponechať dnešné správanie, nastavte ich explicitne na guarde alebo v defaults:

// Keep today's behaviour after the next major — set on the guard or under defaults
'registration' => ['uniform_response' => false],
'verification' => ['mode' => 'optional', 'secure_on_email_login' => false],
'lockout' => ['enabled' => false],

Pred zapnutím si overte, čo zmenia pre vašich používateľov: registrácia už neprihlási (po registrácii ich pošlite na prihlásenie), neoverené účty sa musia pred prihlásením overiť, e-mailové prihlásenie do neovereného účtu odstráni heslo nastavené pred overením (používateľ si ho nastaví znova) a opakované neúspechy uzamknú účet na lockout.duration.

Známe obmedzenia

  • Denylist je v cache — jej vyprázdnenie oživí zrušené, ešte platné prístupové tokeny až do ich expirácie. Invalidácie pokrýva verzia tokenu; zvyšok ohraničí krátke access_ttl.
  • Vynútené nastavenie faktora — útočník, ktorý pozná len heslo, by si v režime required mohol nastaviť vlastný faktor; zmierňuje to podmienka overenej adresy a notifikácie a výzva, ktorej krok nastavenia zastaral (faktor si medzitým nastavili), sa ukončí.
  • Registrácia s okamžitým vydaním tokenov prezradí obsadenú adresu — použite režimy odolné voči enumerácii alebo registration.uniform_response.
  • Prevzatie účtu cez overovací odkaz — secure_on_email_login sa nespustí, keď sa adresa overí odkazom či kódom poslaným po registrácii: je to vlastný krok registrujúceho a ten heslo pozná. Ak vlastník adresy klikne na taký odkaz pre účet, ktorý nevytvoril (e-mail mu radí ho ignorovať), predchádzajúce heslo zostane. Pri required_for_login sa pred týmto kliknutím nikto neprihlási.
  • Zmena prihlasovacích údajov, ktorá už prebieha — relácia, ktorá prešla overením tesne pred prevzatím (alebo obnovou hesla), môže ešte dokončiť začatú zmenu hesla; prevzatie túto reláciu ukončí, takže potrebuje staré heslo a presne toto okno v rádovo milisekundách.
  • Jedna relying party pre passkeys všetkých guardov a jeden typ kľúča pre všetky modely guardov.

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.