FixVibe

// docs / baas security / clerk hardening

Clerk-sekuriteitskontrolelys: 20 items

Clerk hanteer auth, sessies en organisasies vir jou toepassing — wat beteken 'n wankonfigureerde Clerk-integrasie is 'n auth-omseiling, 'n sessie-fiksasie-vektor, of 'n org-leek-pad. Hierdie kontrolelys is 'n 20-item-oudit oor sleutels, sessie-konfigurasie, webhooks, organisasies, JWT-sjablone en deurlopende monitering. KI-koderingsgereedskap bedraad Clerk vinnig met sinvolle versteke; hierdie lys vang die items wat hulle agterlaat.

Vir agtergrond oor waarom auth-laag-wankonfigurasies 'n KI-gereedskap-swakpunt is, sien Waarom KI-koderingsgereedskap sekuriteitsgapings laat. Vir die parallelle kontrolelys op Auth0, sien Auth0-sekuriteitskontrolelys.

Omgewing-sleutels en oorsprong-toelaatlys

Clerk reik twee duidelike sleutels per projek uit. Om hulle te meng of te lek, is die eerste falingsmodus.

  1. Gebruik die publiseerbare sleutel (pk_live_* in produksie, pk_test_* in ontwikkeling) in die blaaier; gebruik die geheime sleutel (sk_live_* / sk_test_*) slegs op die bediener. Die publiseerbare sleutel is veilig in NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY; die geheime sleutel moet nooit 'n publieke env-voorvoegsel dra nie en moet nooit in 'n kliëntkomponent verskyn nie.
  2. Verifieer dat die produksie-toepassing pk_live_* gebruik, nie pk_test_* nie. Toets-instansies laat ongeverifieerde e-pos-adresse en gedeaktiveerde MFA toe — om toets-modus na produksie te stuur, is 'n auth-omseiling.
  3. Konfigureer die toegelate oorspronge in die Clerk-Dashboard. Instellings → Domeine → Toegelate oorspronge moet jou produksie-domein presies lys. Leë of jokerteken-oorsprong-lyste laat aanvallers skelm Clerk-frontends skep wat met jou backend kommunikeer.
  4. Roteer die geheime sleutel by enige vertrek of vermoede lek. Dashboard → API-sleutels → Herstel. Ou sleutel is ongeldig; herontplooi bedienerkant-kode met die nuwe waarde voor rotering.

Sessie-konfigurasie

Sessie-verstryking en ledigheid-time-outs is die verskil tussen 'n gesteelde sessie wat 'n 10-minute-voorval is en 'n 30-dae-een.

  1. Stel sessie-ledigheid-time-out op 30 minute of minder vir SaaS-toepassings wat sensitiewe data hanteer. Dashboard → Sessies → Ledigheid-time-out. Banking-vlak toepassings behoort 5-10 minute te gebruik; standaard SaaS 30-60 minute; verbruikerstoepassings 1-7 dae. Verstek is 7 dae.
  2. Aktiveer sessie-herroeping by wagwoordverandering, e-pos-verandering en MFA-inskrywing. Dashboard → Sessies → Herroep by. Dit is gebruiker-geïnisieerde sekuriteitsgebeurtenisse; bestaande sessies op ander toestelle moet beëindig word.
  3. Verifieer sessies bedienerkant op elke beskermde roete, nie net by aansluiting nie. In Next.js: const { userId } = await auth(); in 'n bediener-komponent / API-roete lees die JWT uit die koekie en valideer dit. Vertrou nooit 'n slegs-koekie-toets nie.
  4. Stel SameSite=Lax (verstek) of Strict op die sessie-koekie. Verifieer in DevTools → Toepassing → Koekies. SameSite=None is 'n CSRF-vektor — moet dit nooit gebruik tensy jy 'n kruis-domein auth-opstelling eksplisiet gekonfigureer het nie.

Webhook-verifikasie

Clerk-webhooks vuur op gebruiker-lewensiklus-gebeurtenisse (geskep, bygewerk, geskrap, sessie.geëindig). Hulle is die sinchronisasie-meganisme vir jou databasis — en 'n vervalste webhook is 'n databasis-skryf-primitief.

  1. Verifieer die Svix-handtekening op elke webhook. Clerk-webhooks word deur Svix geteken. Gebruik new Webhook(secret).verify(body, headers). Verwerp met 401 as verifikasie misluk.
  2. Stoor die webhook-geheim in 'n omgewingsveranderlike, nooit in kode nie. Die geheim roteer by elke Dashboard-hergenerasie — jou ontplooiing moet dit uit die env lees, nie uit 'n konstante nie.
  3. Idempotensie op elke hanteerder. Webhook-aflewerings kan herhaal. Gebruik die svix-id-kopstuk as 'n primêre sleutel in 'n webhook_events-tabel om te ontdubbeleer. Omhul die toestandsverandering en die idempotensie-invoeging in dieselfde transaksie.
  4. By user.deleted, hard-skrap of anonimiseer PII binne 24 uur. GDPR / CCPA vereis dit. Oudit die skrap-pad: watter tabelle hou hierdie gebruiker se data? Gebruik FK ON DELETE CASCADE waar jy kan.

Organisasies en toestemmings

As jy Clerk-Organisasies gebruik, is die org-grens jou huurder-isolasie. Elke bedienerkant-navraag moet daarop filtreer.

  1. Op elke API-roete, lees beide userId en orgId uit auth() en filtreer databasis-navrae op albei. WHERE org_id = $orgId AND user_id = $userId. Vertrou nooit 'n org_id uit die versoek-liggaam nie.
  2. <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.
  3. Toets kruis-org-isolasie met twee werklike org-rekeninge. Skep Org A, vul data, teken in by Org B in 'n ander blaaier, probeer Org A se data via die API lees. Antwoord moet 403 of 404 wees.

JWT-sjablone en eksterne integrasies

JWT-sjablone stoot Clerk-identiteit in Supabase, Firebase en ander stroomafwaartse dienste. Wankonfigureerde sjablone deel oor-deel aansprake of stel data bloot wat jy nie bedoel het nie.

  1. Vir elke JWT-sjabloon, lys elke aanspraak en bevestig dat dit nodig is. Dashboard → JWT-sjablone. 'n Sjabloon wat email en phone na Supabase stuur, stel PII bloot aan enigiemand wat die JWT in die blaaier lees.
  2. Stel kort verstryking op JWT-sjablone wat vir kliëntkant-stroomafwaartse oproepe gebruik word. 60 sekondes vir stroomafwaartse API-versoeke is die standaard. Langer-lewende JWT's word gesteel en hervertoon.
  3. Verifieer die gehoor-aanspraak (aud) aan die ontvangerkant. Supabase, Firebase, ens. moet kontroleer dat aud by die verwagte diens-identifiseerder pas. Sonder dit kan 'n JWT wat vir diens A uitgereik is, by diens B autentiseer.

Operasionele monitering

Auth is die hoogste-sein-log-bron wat jy het. Hou dit dop.

  1. Waarsku oor mislukte-aanteken-spronge per IP / per rekening. 'n 50× normale falingstempo is 'n geloofsbrief-volstop-aanval. Clerk stuur hierdie gebeurtenisse na webhooks; stuur hulle na jou SIEM.
  2. Kwartaalliks oorsig van sessie- en instansie-instellingsdrywing. Versteke verander soos Clerk opdateer; "ou konfigurasies" word stilweg met tyd verkeerd. Diff die Dashboard JSON-uitvoer teen jou laaste-bekende-goeie kopie.

Volgende stappe

Voer 'n FixVibe-skandering teen jou produksie-URL uit — die baas.clerk-auth0-toets merk Clerk-publiseerbare sleutels, toets-sleutels in produksie en gebundelde geheime sleutels. Vir die ekwivalente kontrolelys op Auth0, sien Auth0-sekuriteitskontrolelys. Vir die sambreel-oorsig oor BaaS-verskaffers, lees BaaS-wankonfigurasieskandeerder.

// skandeer jou baas-oppervlak

Vind die oop tabel voordat iemand anders dit doen.

Plak 'n produksie-URL in. FixVibe identifiseer die BaaS-verskaffers waarmee jou toepassing kommunikeer, neem vingerafdrukke van hul openbare eindpunte en rapporteer wat 'n ongeautentiseerde kliënt kan lees of skryf. Gratis, geen installasie nie, geen kaart nie.

  • Gratis vlak — 3 skanderings / maand, geen aansluitkaart nie.
  • Passiewe BaaS-vingerafdrukke — geen domeinverifikasie nodig nie.
  • Supabase, Firebase, Clerk, Auth0, Appwrite en meer.
  • KI-regstellingsaanwysings by elke bevinding — plak terug in Cursor / Claude Code.
Voer 'n gratis BaaS-skandering uit

geen aansluiting nodig nie

Clerk-sekuriteitskontrolelys: 20 items — Docs · FixVibe