// 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.
- 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 inNEXT_PUBLIC_CLERK_PUBLISHABLE_KEY; die geheime sleutel moet nooit 'n publieke env-voorvoegsel dra nie en moet nooit in 'n kliëntkomponent verskyn nie. - Verifieer dat die produksie-toepassing
pk_live_*gebruik, niepk_test_*nie. Toets-instansies laat ongeverifieerde e-pos-adresse en gedeaktiveerde MFA toe — om toets-modus na produksie te stuur, is 'n auth-omseiling. - 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.
- 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.
- 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.
- 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.
- 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. - Stel
SameSite=Lax(verstek) ofStrictop die sessie-koekie. Verifieer in DevTools → Toepassing → Koekies.SameSite=Noneis '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.
- Verifieer die Svix-handtekening op elke webhook. Clerk-webhooks word deur Svix geteken. Gebruik
new Webhook(secret).verify(body, headers). Verwerp met401as verifikasie misluk. - 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.
- Idempotensie op elke hanteerder. Webhook-aflewerings kan herhaal. Gebruik die
svix-id-kopstuk as 'n primêre sleutel in 'nwebhook_events-tabel om te ontdubbeleer. Omhul die toestandsverandering en die idempotensie-invoeging in dieselfde transaksie. - 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.
- Op elke API-roete, lees beide
userIdenorgIduitauth()en filtreer databasis-navrae op albei.WHERE org_id = $orgId AND user_id = $userId. Vertrou nooit 'norg_iduit die versoek-liggaam nie. - <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.
- 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
403of404wees.
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.
- Vir elke JWT-sjabloon, lys elke aanspraak en bevestig dat dit nodig is. Dashboard → JWT-sjablone. 'n Sjabloon wat
emailenphonena Supabase stuur, stel PII bloot aan enigiemand wat die JWT in die blaaier lees. - 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.
- Verifieer die gehoor-aanspraak (
aud) aan die ontvangerkant. Supabase, Firebase, ens. moet kontroleer dataudby 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.
- 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.
- 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.
