// docs / baas security / clerk hardening
Kontrolný zoznam zabezpečenia Clerk: 20 položiek
Clerk obsluhuje autentizáciu, relácie a organizácie pre vašu aplikáciu — čo znamená, že chybne nakonfigurovaná Clerk integrácia je obídenie autentizácie, vektor fixácie relácie alebo cesta úniku organizácie. Tento kontrolný zoznam je 20-položkový audit naprieč kľúčmi, konfiguráciou relácie, webhookmi, organizáciami, JWT šablónami a priebežným monitorovaním. AI nástroje na kódovanie zapájajú Clerk rýchlo s rozumnými predvolenými hodnotami; tento zoznam zachytí položky, ktoré nechávajú na stole.
Pre kontext, prečo sú chybné konfigurácie vrstvy autentizácie slabým miestom AI nástrojov, si pozrite Prečo nástroje na kódovanie s AI zanechávajú bezpečnostné medzery. Pre paralelný kontrolný zoznam pre Auth0 si pozrite Kontrolný zoznam zabezpečenia Auth0.
Environment kľúče a zoznam povolených originov
Clerk vydáva dva odlišné kľúče na projekt. Ich miešanie alebo únik je prvý spôsob zlyhania.
- Použite publishable kľúč (
pk_live_*v produkcii,pk_test_*v dev) v prehliadači; secret kľúč (sk_live_*/sk_test_*) iba na strane servera. Publishable kľúč je bezpečný vNEXT_PUBLIC_CLERK_PUBLISHABLE_KEY; secret kľúč nikdy nesmie niesť verejnú env predponu a nikdy sa nesmie objaviť v klientskom komponente. - Overte, že produkčná aplikácia používa
pk_live_*, niepk_test_*. Testovacie inštancie povoľujú neoverené emailové adresy a deaktivované MFA — odoslanie testovacieho režimu do produkcie je obídenie autentizácie. - Nakonfigurujte povolené originy v Clerk Dashboarde. Settings → Domains → Allowed origins musí presne uvádzať vašu produkčnú doménu. Prázdne alebo žolíkové zoznamy originov umožňujú útočníkom vytvárať podvodné Clerk frontendy, ktoré komunikujú s vaším backendom.
- Rotujte secret kľúč pri akomkoľvek odchode alebo podozrení na únik. Dashboard → API Keys → Reset. Starý kľúč je zneplatnený; znova nasaďte kód na strane servera s novou hodnotou pred rotáciou.
Konfigurácia relácie
Doba platnosti relácie a časové limity neaktivity sú rozdiel medzi tým, či ukradnutá relácia je 10-minútový incident alebo 30-dňový.
- Nastavte časový limit neaktivity relácie na 30 minút alebo menej pre SaaS aplikácie spracúvajúce citlivé dáta. Dashboard → Sessions → Inactivity timeout. Aplikácie bankovej úrovne by mali používať 5-10 minút; štandardný SaaS 30-60 minút; spotrebiteľské aplikácie 1-7 dní. Predvolené je 7 dní.
- Zapnite zrušenie relácie pri zmene hesla, zmene emailu a registrácii MFA. Dashboard → Sessions → Revoke on. Sú to bezpečnostné udalosti iniciované používateľom; existujúce relácie na iných zariadeniach by mali byť ukončené.
- Overujte relácie na strane servera pri každej chránenej trase, nielen pri prihlasovaní. V Next.js:
const { userId } = await auth();v server komponente / API route číta JWT z cookie a validuje ho. Nikdy neverte kontrole iba cookie. - Nastavte
SameSite=Lax(predvolené) aleboStrictna session cookie. Overte v DevTools → Application → Cookies.SameSite=Noneje CSRF vektor — nikdy ho nepoužívajte, pokiaľ ste explicitne nenakonfigurovali cross-domain auth nastavenie.
Overovanie webhookov
Clerk webhooky sa spúšťajú pri udalostiach životného cyklu používateľa (created, updated, deleted, session.ended). Sú synchronizačným mechanizmom pre vašu databázu — a podvrhnutý webhook je primitívom pre zápis do databázy.
- Overujte Svix podpis na každom webhooku. Clerk webhooky sú podpísané Svixom. Použite
new Webhook(secret).verify(body, headers). Odmietnite s401, ak overenie zlyhá. - Ukladajte webhook secret v environment premennej, nikdy v kóde. Secret sa rotuje pri každej regenerácii v Dashboarde — vaše nasadenie ho musí čítať z env, nie z konštanty.
- Idempotencia na každom handleri. Doručenia webhookov sa môžu opakovať. Použite hlavičku
svix-idako primárny kľúč v tabuľkewebhook_eventsna deduplikáciu. Zabaľte zmenu stavu a vloženie idempotencie do tej istej transakcie. - Pri
user.deletedtvrdo odstráňte alebo anonymizujte PII do 24 hodín. GDPR / CCPA to vyžadujú. Auditujte cestu mazania: ktoré tabuľky obsahujú dáta tohto používateľa? Použite FK ON DELETE CASCADE tam, kde môžete.
Organizácie a oprávnenia
Ak používate Clerk Organizations, hranica organizácie je vaša izolácia tenantov. Každý dopyt na strane servera musí filtrovať podľa nej.
- Na každej API route čítajte
userIdajorgIdzauth()a filtrujte databázové dopyty podľa oboch.WHERE org_id = $orgId AND user_id = $userId. Nikdy neverteorg_idz tela požiadavky. - <strong>Use Clerk role checks for privileged operations, not boolean checks against the user object.</strong> <code>has({ role: 'org:admin' })</code> reads the role from the verified JWT. A user can spoof a boolean on a stale client object; they cannot spoof a JWT claim.
- Otestujte cross-org izoláciu s dvomi reálnymi účtami organizácií. Vytvorte Org A, naplňte dátami, prihláste sa do Org B v inom prehliadači, pokúste sa čítať dáta Org A cez API. Odpoveď musí byť
403alebo404.
JWT šablóny a externé integrácie
JWT šablóny posúvajú Clerk identitu do Supabase, Firebase a ďalších downstream služieb. Chybne nakonfigurované šablóny príliš zdieľajú nároky alebo odhaľujú dáta, ktoré ste nemienili.
- Pre každú JWT šablónu vypíšte každý nárok a potvrďte, že je nevyhnutný. Dashboard → JWT Templates. Šablóna, ktorá posiela
emailaphonedo Supabase, vystavuje PII komukoľvek, kto číta JWT v prehliadači. - Nastavte krátku dobu platnosti na JWT šablónach používaných pre downstream volania na strane klienta. 60 sekúnd pre downstream API požiadavky je štandard. Dlhšie žijúce JWT sú kradnuté a prehrávané.
- Overujte nárok audience (
aud) na prijímajúcej strane. Supabase, Firebase atď. by mali kontrolovať, žeaudzodpovedá očakávanému identifikátoru služby. Bez toho môže JWT vydaný pre službu A autentizovať službu B.
Operatívne monitorovanie
Autentizácia je log zdrojom s najvyšším signálom, aký máte. Sledujte ho.
- Upozorňujte na skoky zlyhaných prihlásení podľa IP / podľa účtu. 50× normálna miera zlyhania je credential-stuffing útok. Clerk emituje tieto udalosti do webhookov; smerujte ich do vášho SIEM.
- Štvrťročná revízia driftu nastavení relácie a inštancie. Predvolené hodnoty sa menia s aktualizáciami Clerku; „staré konfigurácie" sa časom potichu stávajú nesprávnymi. Diffujte JSON export z Dashboardu proti vašej poslednej známej-dobrej kópii.
Ďalšie kroky
Spustite sken FixVibe proti vašej produkčnej URL — kontrola baas.clerk-auth0 označuje Clerk publishable kľúče, testovacie kľúče v produkcii a zbalené secret kľúče. Pre ekvivalentný kontrolný zoznam na Auth0 si pozrite Kontrolný zoznam zabezpečenia Auth0. Pre zastrešujúci pohľad naprieč BaaS poskytovateľmi si prečítajte Skener chybnej konfigurácie BaaS.
