// docs / baas security / supabase service role exposure
Supabase service role llave ojehechakáva JavaScript-pe: mba'épa he'ise ha mba'éichapa ojejuhu
Supabase service role llave ha'e ne base de datos llave guasu. Oguerekóva ohasa Row-Level Security, ikatu omoñe'ẽ cada columna cada tabla, ha ikatu ohaikuaa térã omopa'ã mba'eve. Oñemoheñói oikove hag̃ua server-side código-pente — araka'eve navegador-pe. Peteĩ IA tembipuru omomyengoviárõ péva JavaScript bundle-pe, ne base de datos ha'eite, público. Ko tembiapokue omombe'u pe JWT forma ohechaukáva peteĩ llave osẽva, umi mbohapy IA-tembipuru patrón omoheñóiva osẽ, mba'épa ejapóta hora peteĩha jejuhu rire, ha mba'éichapa eñehecha automaticamente usuario ohecha mboyve.
Mba'épa service role llave
Supabase omeẽ mokõi llave diferente cada proyecto-pe: pe anon llave (oñehenói avei publishable llave proyecto pyahúpe) ha pe service_role llave. Mokõive ha'e JSON Web Token ojefirmáva ne proyecto JWT secreto rupi. Ojuavýva ha'e pe role claim oĩva JWT payload-pe — anon llave público-pe, service_role llave guasu-pe. PostgREST, Supabase Storage, ha Supabase Auth opavave omboheko bypass-everything ohecha rire pe service_role claim.
Edecodifika mba'eveichagua Supabase llave jwt.io-pe ha ehecha pe payload. Pe forma peteĩ service-role JWT-gua oñekuaaite:
Decodificado payload peteĩ service-role JWT-gua (ojehechauka peteĩ sintaxis-omombyajýva bloque-icha yvýpe).
{
"iss": "supabase",
"ref": "[project-ref]",
"role": "service_role",
"iat": 1700000000,
"exp": 2000000000
}Supabase proyecto pyahuvéva omeẽ llave secreta-icha sb_secret_ prefijo-ndive JWT rangue. Pe jeporavo peteĩchaite — mba'eveichagua oguerekóva sb_secret_ peteĩ bundle público-pe ha'e ivaietereíva avei.
Mba'éichapa tembipuru IA omyengovia service role llave
Rohecha umi mbohapy patrón heta sũ aplicación vibe-code-pe. Cada peteĩ oñepyrũ peteĩ desarrollador ojerure IA tembipurúpe ipytyvõ hag̃ua ha opa pe service llave omoinge bundle-pe.
Patrón 1: Peteĩ .env kuatia NEXT_PUBLIC_ prefijo-ndive
Pe desarrollador ojerure IA tembipurúpe "emoinge Supabase" ha omoneĩ peteĩ .env mokõive llave-ndive. Pe IA tembipuru — oñembo'éva peteĩ corpus rehe heta variable entorno ojejahechauka NEXT_PUBLIC_* rupi — omoĩ NEXT_PUBLIC_ mokõivépe. Next.js omoinge mba'eveichagua ojojáva pe prefijo-ndive cliente bundle-pe ojejapo aja. Eñemoherakuã Vercel-pe, ha pe service llave oĩ main.[hash].js-pe.
Patrón 2: Llave vai createClient ojepuru
Pe desarrollador ohai mokõive llave peteĩ config.ts-pe IA omoheñóiva, ha pe IA omoñepyrũ pe navegador createClient() process.env.SUPABASE_SERVICE_ROLE_KEY ndive jejavýpe. Pe ñembojere ohupyty variable, ha pe JWT oguahẽ bundle-pe.
Patrón 3: Service-role llave ohaipyréva seed scripts-pe
Pe desarrollador ojerure IA tembipurúpe ohai peteĩ script omoñoty base de datos. Pe IA ohai service-role llave directamente kuatia-pe (omoñe'ẽ entorno-gui rangue), ojapo commit pe kuatia repositorio-pe, ha pe repo GitHub público térã pe aplicación oñemoherakuãva /scripts/seed.js tape oĩma omeẽva llave.
Mba'éichapa FixVibe bundle escaneo ojuhu osẽva
FixVibe bundle-secrets check oguenohẽ cada JavaScript kuatia ohenóiva pe aplicación oñemoherakuãva — entrada chunk, lazy-loaded chunk, web worker, service worker — ha omoinge ko'ã peteĩ detector-pe odecodifikáva mba'eveichagua ojojáva JWT forma (eyJ[base64-header].eyJ[base64-payload].[signature]) ndive. Pe payload decodificado oguerekórõ "role": "service_role", pe escaneo omombe'u peteĩ jejuhu crítico kuatia tape ha pe línea pe llave osẽháme. Pe peteĩchagua check avei ojoja pe sb_secret_* patrón pyahúndive prefijo rupi.
Pe escaneo araka'eve nahániri autentica pe llave ojuhuvévape. Ohechauka pe forma ha omombe'u pe osẽvarã — pe llave eipuru hag̃ua ohechauka ikatúva ojeporu ha'éta jeporu autorizado'ỹva ne base de datos rehe. Pe testimonio oĩ pe JWT payload ijehegui.
Ojejuhúma — mba'épa ejapóta hora peteĩháme
Peteĩ service role llave osẽma ha'e peteĩ emergencia runtime. Eikuaapy pe llave ojeraspa raka'e — atacante oma'ẽ bundle público real time-pe. Eipuru base de datos compromise-vapevoi ne llave embojere meve ha ne actividad ko'ãgagua eikũmby meve.
- Embojere llave pya'e. Supabase Dashboard-pe, etereho Project Settings → API → Service role key → Reset. Pe llave yma oñembogue segundo-pe. Mba'eveichagua server-side código oipurúva pe llave oñembojejy va'erã ha eñemoherakuã jey embojere mboyve.
- Ehecha base de datos actividad ko'ãgagua. Eavri Database → Logs dashboard-pe. Embofiltra umi 7 ára ramoiguáre. Eheka
SELECT *consulta ojeporu'ỹva tabla PII-ndive,UPDATEguasu térãDELETEdeclaración, ha solicitud IP-pegua oĩ'ỹva ne infraestructura jekuaáva. Supabase oñongatu pex-real-ipencabezado cada solicitud-pe. - Ehecha storage objeto. Etereho Storage → Logs ha ehecha kuatia ñemboguejy ko'ãgagua. Peteĩ service-role llave ojehechauka omeẽ bypass-everything jepokuaa bucket privado-pe avei.
- Eipe'a pe llave control fuente-gui. Embojere rire jepe, eheja pe JWT ne git tembiasakuépe he'ise ojuhukuaa ne repo público-pe. Eipuru
git filter-repotérã BFG Repo-Cleaner eipe'a hag̃ua tembiasakue-gui, upéi force-push (emomarandu ñembyaty mboyve). - Eheka jey myatyrõ rire. Embohape peteĩ FixVibe escaneo pyahu pe aplicación oñemoherakuã jeýva. Pe bundle-secrets jejuhu oñembogue va'erã. Eikuaapotĩ ndaipóri
service_roleJWT ha ndaipórisb_secret_*mba'eveichagua chunk-pe.
Eñangareko ñepyrũmby gui
Pe ñemyatyrõ estructural ha'e disciplina réra jeporavópe oñondive tembipuru-pegua ñembojerokuéra:
- Araka'eve embojo'ape service llave
NEXT_PUBLIC_*,VITE_*, térã mba'eveichagua bundle-omongoraja prefijo-ndive. Pe réra ñemboheko ha'e pe pa'ũ — cada framework oñe'ẽrendu. - Eheja service llave okápe
.env-gui desarrollador máquina-pe. Emoñe'ẽ peteĩ secret manager-gui (Doppler, Infisical, Vercel encrypted env vars) deploy aja, araka'eve commit local. - <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.
- Emoĩ peteĩ CI portón ohekáva ñembojere osẽva.
next buildrire, grep pe.next/static/chunks/osẽva peservice_rolecadena rehegua. Embogue pe ñembojere mba'eve ojojárõ.
# 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 1Porandu hetave ojeporandúva
Mbovy pya'e atacante ojuhuiete Supabase service-role llave osẽva?
Public-bundle escáner oguata deployment pyahu minuto-pe. Investigador ohaikuaa exploit omba'apóva Supabase proyecto pyahu rehe peteĩ hora-me oñemoherakuã rire. Eipuru mba'eveichagua service-role exposición peteĩ 60-minuto ventana-icha, nahániri 60-día.
Embojere llave ha'eñoite hi'arã, térã aikuaapy va'erã datos osẽma?
Mboipy omopypaha pe llave osẽva péro nomoambuéi datos osẽmava. Ne tabla oguerekórõ PII, ñemboheko datos, térã mba'eveichagua datos kompiyaupyréva, ikatu eguereko peteĩ notificación obligación GDPR (72 hora), CCPA, térã HIPAA rupi. Ehecha log ha eñe'ẽ legal asesor-ndive auditoría ohechauka rire jepokuaa rojevyméva.
RLS piko ikatu oñangareko cherehe service-role llave osẽrõ?
Nahániri. Row-Level Security ojehasa entero service_role claim rupi. Péva oñemoheñói upéicha — pe llave oĩ backend código ohasa hag̃ua RLS administración tembiapópe. Pe ñemyatyrõ ha'e ejapo pe llave araka'eve oguahẽ peteĩ contexto-pe atacante ikatuháme omoñe'ẽ.
Kóva piko oñemoĩ Supabase publishable / secreto llave modelo pyahúpe (<code>sb_publishable_</code> / <code>sb_secret_</code>)?
Heẽ — clase mbyja peteĩchaite. Pe sb_secret_* llave ha'e formato secreto pyahu omyengoviáva pe service-role JWT proyecto pyahúpe. Mba'eveichagua oguerekóva sb_secret_* bundle-pe ha'e ivaietereíva avei service-role JWT osẽva. FixVibe bundle-secrets detector ojoja mokõive forma.
Mba'épa anon / publishable llave rehe — péva piko sãsõ bundle-pe?
Heẽ, ojejapouka upéicha. Pe anon llave oñemoheñói oikove hag̃ua navegador-pe ha ha'e mba'e cada Supabase web cliente oipurúva. Hisãsõva oĩ jekuaaity RLS oñemboheko porãhápe cada tabla público rehe. Ehecha Supabase RLS escáner tembiapokue mba'épa ehechakuaa hag̃ua.
Tape upéi
Embohape peteĩ FixVibe escaneo ne producción URL-pe — pe bundle-secrets check ha'e reiete, ndaipóri inscripción, ha omombe'u service_role exposición peteĩ minuto-me. Embojuaju kóva Supabase RLS escáner ndive ehechakuaa hag̃ua pe RLS layer omba'apóva ha pe Supabase storage bucket seguridad checklist embotyhag̃ua kuatia jepokuaa. Aikuaa porãve hag̃ua mba'érepa tembipuru IA omoheñói ko jejuhukuera, emoñe'ẽ Mba'érepa tembipuru IA omoheja seguridad pa'ũ.
