FixVibe

// docs / baas security / supabase service role exposure

Kle service-role Supabase ekspoze nan JavaScript: sa li vle di ak kijan pou jwenn li

Kle service-role Supabase la se mèt kle baz done ou. Nenpòt moun ki kenbe li kontoune sekirite nan nivo ranje, kapab li chak kolòn nan chak tab, epi kapab ekri oswa efase nenpòt sa li chwazi. Li fèt pou viv sèlman nan kòd kote sèvè — pa janm nan navigatè a. Lè yon zouti kodaj IA voye li nan pakèt JavaScript la, baz done ou a, efektivman, piblik. Atik sa a eksplike fòm JWT ki idantifye yon kle ki koule, twa modèl IA-zouti ki pwodwi koule a, sa pou fè nan premye èdtan apre deteksyon, ak kijan pou eskane li otomatikman anvan itilizatè yo.

Sa kle service-role la ye

Supabase pibliye de kle distenk pou chak pwojè: kle anon (yo rele tou kle piblikab nan pwojè pi nouvo yo) ak kle service_role la. Toulède se JSON Web Tokens siyen pa sekrè JWT pwojè ou. Diferans lan se reklamasyon role ki kwit nan chaj JWT a — anon pou kle piblik la, service_role pou mèt kle a. PostgREST, Supabase Storage, ak Supabase Auth tout swiche nan mòd kontoune-tout-bagay lè yo wè reklamasyon service_role la.

Dekode nenpòt kle Supabase nan jwt.io epi gade chaj la. Fòm yon JWT service-role pa twonpe:

Chaj dekode yon JWT service-role (montre kòm yon blòk sentaks-mete-aksan anba).

json
{
  "iss": "supabase",
  "ref": "[project-ref]",
  "role": "service_role",
  "iat": 1700000000,
  "exp": 2000000000
}

Pwojè Supabase pi nouvo yo pibliye kle stil-sekrè ak prefiks sb_secret_ olye yon JWT. Konpòtman an idantik — nenpòt sa ki pote sb_secret_ nan yon pakèt piblik se egalman katastwofik.

Kijan zouti kodaj IA fè kle service-role la koule

Nou wè menm twa modèl yo atravè dè milye aplikasyon kodaj-vibe. Chak youn kòmanse ak yon devlopè k ap mande yon zouti IA pou èd epi li fini ak kle sèvis la kole nan yon pakèt.

Modèl 1: Yon sèl dosye .env ak prefiks NEXT_PUBLIC_

Devlopè a mande zouti IA a "konfigire Supabase" epi aksepte yon sèl .env ak toulède kle. Zouti IA a — antrene sou yon korpis kote pifò varyab anviwònman ekspoze via NEXT_PUBLIC_* — prefiks toulède ak NEXT_PUBLIC_. Next.js mete nenpòt sa ki koresponn ak prefiks sa a nan pakèt kliyan an nan moman konstriksyon. Voye nan Vercel, epi kle sèvis la nan main.[hash].js.

Modèl 2: Move kle nan apèl createClient

Devlopè a kole toulède kle nan yon dosye config.ts ke IA jenere, epi IA a ranpli apèl createClient() bò-navigatè a ak process.env.SUPABASE_SERVICE_ROLE_KEY pa erè. Konstriksyon an pran varyab la, epi JWT la atè nan pakèt la.

Modèl 3: Kle service-role kode pou rive nan eskript semans

Devlopè a mande zouti IA a ekri yon eskript ki semè baz done a. IA a kode kle service-role la dirèkteman nan dosye a (olye li li li nan anviwònman), komèt dosye a nan depo a, epi depo GitHub piblik la oswa wout /scripts/seed.js aplikasyon deplwaye a kounye a sèvi kle a.

Kijan eskanè pakèt FixVibe a detekte koule a

Tcheke pakèt-sekrè FixVibe a telechaje chak dosye JavaScript referans pa aplikasyon deplwaye a — eklas antre, eklas paresez chaje, travayè web, travayè sèvis — epi pase yo nan yon detèktè ki dekode nenpòt sa ki koresponn ak fòm JWT (eyJ[base64-header].eyJ[base64-payload].[signature]). Si chaj dekode a gen "role": "service_role", eskanè a rapòte li kòm yon dekouvèt kritik ak chemen dosye a ak liy egzak kote kle a parèt. Menm tcheke a tou koresponn ak modèl sb_secret_* pi nouvo pa prefiks.

Eskanè a pa janm otantifye ak kle dekouvri a. Li idantifye fòm lan epi rapòte koule a — itilize kle a pou pwouve eksplwatabilite ta dwe aksè san otorizasyon nan baz done ou. Prèv la se nan chaj JWT a li menm.

Deteksyone — sa pou fè nan premye èdtan

Yon kle service-role ki koule se yon ijans ekzekisyon. Sipoze kle a fin ranmase — atakè monitè pakèt piblik an tan reyèl. Trete baz done a kòm konpwomi jiskaske ou fin woule kle a epi odite aktivite resan.

  1. Woule kle a imedyatman. Nan Dashboard Supabase a, ale nan Project Settings → API → Service role key → Reset. Ansyen kle a anile nan kèk segonn. Nenpòt kòd bò-sèvis ki itilize kle a dwe mete ajou epi redeplwaye anvan rotasyon an pase.
  2. Odit aktivite baz done resan. Louvri Database → Logs nan dashboard la. Filtre sou 7 dènye jou yo. Chèche demand SELECT * etranj kont tab ki gen PII, gwo deklarasyon UPDATE oswa DELETE, ak demand soti nan IP deyò enfrastrikti ou konnen. Supabase log antèt x-real-ip sou chak demand.
  3. Tcheke objè depo. Vizite Storage → Logs epi revize telechaje dosye resan. Yon kle service-role ki koule bay aksè kontoune-tout-bagay sou bokè prive tou.
  4. Retire kle a nan kontwòl sous. Menm apre rotasyon, kite JWT a nan istwa git ou vle di li dekouvri nan depo piblik la. Itilize git filter-repo oswa BFG Repo-Cleaner pou nete li soti nan istwa, lè sa a fòs-pouse (avèti kolaboratè anvan).
  5. Re-eskane apre ranjman. Lanse yon eskanè FixVibe fre kont aplikasyon redeplwaye a. Dekouvèt pakèt-sekrè yo ta dwe efase. Konfime pa gen JWT service_role epi pa gen chèn sb_secret_* ki rete nan nenpòt eklas.

Anpeche koule a nan premye plas

Ranjman estriktirèl la se disiplin nomansyon plis garde-kò nan nivo zouti:

  • Pa janm prefiks kle sèvis la ak NEXT_PUBLIC_*, VITE_*, oswa nenpòt lòt prefiks ki mete-nan-pakèt. Konvansyon nomansyon an se fwontyè a — chak kad respekte li.
  • Kenbe kle sèvis la deyò .env nèt sou machin devlopè a. Li li nan yon manadjè sekrè (Doppler, Infisical, varyab env enkripte Vercel) sou deplwaman, pa janm komèt li lokalman.
  • <strong>Mark every Supabase client construction with explicit context.</strong> Files named <code>supabase/browser.ts</code> use the anon key; files named <code>supabase/server.ts</code> use the service-role key with <code>import 'server-only'</code> at the top. The <code>server-only</code> import causes a build error if a client component tries to consume the module.
  • <strong>Add a pre-commit hook that greps for JWT-shaped strings.</strong> <code>git diff --staged | grep -E 'eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+'</code> catches both anon and service tokens before they leave your machine.
  • Ajoute yon pòt CI ki eskane sòti konstriksyon an. Apre next build, grep sòti .next/static/chunks/ pou chèn service_role la. Echwe konstriksyon an si nenpòt bagay koresponn.
bash
# Pre-commit hook: refuse any staged JWT-shaped string.
git diff --staged \
  | grep -E 'eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+' \
  && echo "JWT detected in staged changes — refusing commit" \
  && exit 1

# CI gate: fail the build if "service_role" shipped to the static bundle.
grep -RE 'service_role|sb_secret_' .next/static/chunks/ \
  && echo "Service-role credential leaked into bundle" \
  && exit 1

Kesyon ki poze souvan

Konbyen vit atakè aktyèlman jwenn kle service-role Supabase ki koule?

Eskanè pakèt piblik draf nouvo deplwaman nan minit. Chèchè dokimante eksplwa k ap mache kont nouvo pwojè Supabase nan mwens pase yon èdtan apati premye deplwaman an. Trete nenpòt ekspozisyon service-role kòm yon fenèt 60-minit, pa yon 60-jou.

Èske woule kle a ase, oswa èske mwen dwe sipoze egzfiltrasyon done?

Rotasyon anile kle ki koule a men li pa defè done ki te deja rale. Si tab ou yo gen PII, done peman, oswa nenpòt done reglemante, ou ka gen yon obligasyon notifikasyon sou GDPR (72 èdtan), CCPA, oswa HIPAA. Odit logs yo epi konsilte konsèy legal si odit la montre aksè sispèk.

Èske RLS kapab pwoteje m si kle service-role la koule?

Non. Sekirite nan nivo ranje konplètman kontoune pa reklamasyon service_role la. Sa se pa konsepsyon — kle a egziste presizeman pou kite kòd backend sote RLS pou operasyon administratè. Mitigasyon an se asire kle a pa janm rive nan yon kontèks kote yon atakè kapab li li.

Èske sa aplike pou nouvo modèl kle piblikab / sekrè Supabase (<code>sb_publishable_</code> / <code>sb_secret_</code>)?

Wi — klas risk idantik. Kle sb_secret_* a se nouvo fòma kle-sekrè ki ranplase JWT service-role pou pwojè pi nouvo yo. Nenpòt sa ki pote sb_secret_* nan yon pakèt se menm jan an katastwofik tankou yon JWT service-role ki koule. Detèktè pakèt-sekrè FixVibe a koresponn ak tou de fòm yo.

Pwoblèm sou kle anon / piblikab la — èske sa an sekirite nan pakèt la?

Wi, pa konsepsyon. Kle anon nan fèt pou viv nan navigatè a epi se sa chak kliyan web Supabase itilize. Sekirite li depann konplètman sou RLS ki konfigire kòrèkteman sou chak tab piblik. Gade atik Eskanè RLS Supabase a pou sa pou tcheke.

Etap pwochèn

Lanse yon eskanè FixVibe kont URL pwodiksyon ou — tcheke pakèt-sekrè a gratis, san enskripsyon, epi rapòte ekspozisyon service_role nan mwens pase yon minit. Akouple sa ak atik Eskanè RLS Supabase pou verifye kouch RLS a ap fè travay li, ak Lis tcheke sekirite bokè depo Supabase pou bloke aksè dosye. Pou kontèks sou poukisa zouti IA jenere klas koule sa a tèlman regilye, li Poukisa zouti kodaj IA kite twou sekirite.

// eskane sifas baas ou

Twouve tab ki louvri a anvan yon lòt moun fè li.

Mete yon URL pwodiksyon. FixVibe enimere founisè BaaS aplikasyon ou a pale ak yo, anprent pwen-fen piblik yo, epi rapòte sa yon kliyan ki pa otantifye kapab li oswa ekri. Gratis, san enstalasyon, san kat.

  • Nivo gratis — 3 eskanè / mwa, san kat enskripsyon.
  • Anprent BaaS pasif — pa bezwen verifikasyon domèn.
  • Supabase, Firebase, Clerk, Auth0, Appwrite, ak plis.
  • Pwòp ranjman IA sou chak dekouvèt — kole tounen nan Cursor / Claude Code.
Lanse yon eskanè BaaS gratis

pa gen enskripsyon ki nesesè

Kle service-role Supabase ekspoze nan JavaScript: sa li vle di ak kijan pou jwenn li — Docs · FixVibe