FixVibe

// docs / baas security / supabase service role exposure

Supabase service role gakoa JavaScript-en agerian: zer esan nahi duen eta nola aurkitu

Supabase service role gakoa zure datu-basearen gako nagusia da. Hura duen edonork errenkada-mailako segurtasuna saihesten du, taula bakoitzeko zutabe bakoitza irakur dezake eta nahi duena idatzi edo ezabatu dezake. Zerbitzariko kodean soilik bizitzeko diseinatuta dago — inoiz ez nabigatzailean. IA kodetze-tresna batek JavaScript bundle-ra bidaltzen duenean, zure datu-basea, izan ere, publikoa da. Artikulu honek galdutako gakoa identifikatzen duen JWT forma, iragazpena sortzen duten IA-tresnen hiru ereduak, detektatu ondorengo lehen orduan zer egin eta erabiltzaileek baino lehen automatikoki nola eskaneatu azaltzen du.

Zer den service role gakoa

Supabasek bi gako ezberdin igortzen ditu proiektu bakoitzeko: anon gakoa (proiektu berriagoetan gako argitaragarria ere deitzen zaiona) eta service_role gakoa. Biak zure proiektuaren JWT sekretuaren bidez sinatutako JSON Web Token-ak dira. Aldea JWT karga-erabilgarrian errotutako role erreklamazioa da — anon gako publikorako, service_role gako nagusirako. PostgREST-ek, Supabase Storage-k eta Supabase Auth-ek guztiek aldatzen dute saihestu-dena modura service_role erreklamazioa ikusten dutenean.

Deskodetu edozein Supabase gako jwt.io-n eta begiratu karga-erabilgarriari. Service-role JWT baten forma argia da:

Service-role JWT baten deskodetutako karga-erabilgarria (sintaxiarekin nabarmendutako bloke gisa erakusten da behean).

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

Supabase proiektu berriagoek sb_secret_ aurrizki duten sekretu-estiloko gakoak igortzen dituzte JWT bat ordez. Portaera berdina da — bundle publiko batean sb_secret_ daraman edozein gauza berdin hondatzailea da.

Nola iragazten duten IA kodetze-tresnek service role gakoa

Hiru eredu berdinak ikusi ditugu vibe-coded milaka aplikazioetan. Bakoitza garatzaile batek IA tresna bati laguntza eskatzen dion eta service gakoa bundle batean txertatzen amaitzen den prozesuarekin hasten da.

1. eredua: NEXT_PUBLIC_ aurrizkia duen .env fitxategi bakarra

Garatzaileak IA tresnari eskatzen dio "Supabase konfiguratzeko" eta bi gakoak dituen .env bakar bat onartzen du. IA tresnak — ingurune-aldagai gehienak NEXT_PUBLIC_* bidez agerian dauden corpus batean trebatuta — biak NEXT_PUBLIC_ aurrizkiarekin aurrizten ditu. Next.js-ek aurrizki horrekin bat datorren edozer bezeroaren bundle-an txertatzen du eraikitze-orduan. Bidali Vercel-era, eta service gakoa main.[hash].js-n dago.

2. eredua: createClient deian okerreko gakoa

Garatzaileak bi gakoak IA-k sortutako config.ts fitxategian itsasten ditu, eta IAk nabigatzailearen aldeko createClient() deia process.env.SUPABASE_SERVICE_ROLE_KEY-rekin betetzen du akatsez. Eraikuntzak aldagaia ekartzen du, eta JWT bundle-an erortzen da.

3. eredua: Service-role gakoa seed scriptetan hardkodeatuta

Garatzaileak IA tresnari eskatzen dio datu-basea sortzeko script bat idazteko. IAk service-role gakoa zuzenean fitxategian kodifikatzen du (ingurunetik irakurri ordez), fitxategia biltegian sartzen du, eta GitHub biltegi publikoa edo zabaldutako aplikazioaren /scripts/seed.js bidea orain gakoa zerbitzatzen ari da.

Nola detektatzen duen FixVibe bundle eskaneatzeak iragazpena

FixVibe-ren bundle-secrets egiaztapenak zabaldutako aplikazioak erreferentziatzen duen JavaScript fitxategi bakoitza deskargatzen du — sarrera-zatiak, alferki kargatutako zatiak, web langileak, zerbitzu-langileak — eta JWT formarekin (eyJ[base64-header].eyJ[base64-payload].[signature]) bat datorren edozer deskodetzen duen detektagailuaren bidez exekutatzen ditu. Deskodetutako karga-erabilgarriak "role": "service_role" badu, eskaneatzeak aurkikuntza kritiko gisa jakinarazten du fitxategiaren bidearekin eta gakoa agertzen den lerro zehatzarekin. Egiaztapen berak sb_secret_* eredu berriagoa ere bat egiten du aurrizkiaren arabera.

Eskaneatzeak ez du inoiz autentifikatzen aurkitutako gakoarekin. Forma identifikatzen du eta iragazpena jakinarazten du — gakoa erabiltzeak ustiagarritasuna frogatzeko zure datu-basera baimenik gabeko sarbidea izango litzateke. Froga JWT karga-erabilgarrian bertan dago.

Detektatuta — lehen orduan zer egin

Galdutako service role gako bat exekuzio-larrialdi bat da. Suposatu gakoa eskaratuta dagoela — erasotzaileek denbora errealean monitorizatzen dituzte bundle publikoak. Tratatu datu-basea arriskupean dagoela gakoa biratu eta azken jarduera auditoratu arte.

  1. Biratu gakoa berehala. Supabase aginte-panelean, joan Project Settings → API → Service role key → Reset. Gako zaharra segundoetan baliogabetuko da. Gakoa erabiltzen duen zerbitzariaren aldeko kode oro eguneratu eta berriz zabaldu behar da errotazioa iritsi baino lehen.
  2. Audita ezazu azken datu-baseko jarduera. Ireki Database → Logs aginte-panelean. Iragazi azken 7 egunetan. Bilatu PII duten taulen aurkako ohiz kanpoko SELECT * kontsultak, UPDATE edo DELETE instrukzio handiak eta zure azpiegitura ezagunaren kanpoko IPetatik datozen eskaerak. Supabasek x-real-ip goiburua erregistratzen du eskaera bakoitzean.
  3. Egiaztatu biltegiratze-objektuak. Bisitatu Storage → Logs eta berrikusi azken fitxategi-deskargak. Galdutako service-role gako batek bidetzaile pribatuetarako saihestu-dena sarbidea ematen du ere.
  4. Kendu gakoa iturburu-kontroletik. Errotazioaren ondoren ere, JWT zure git historian uzteak biltegi publikoan aurkigarria izaten du. Erabili git filter-repo edo BFG Repo-Cleaner historiatik garbitzeko, gero indarrez bultzatu (lehenik abisatu kolaboratzaileei).
  5. Berriz eskaneatu konponketaren ondoren. Exekutatu FixVibe eskaneatze berri bat berriz zabaldutako aplikazioaren aurka. Bundle-secrets aurkikuntzak garbitu beharko luke. Berretsi ez dela service_role JWT-rik geratzen eta ez dela sb_secret_* katerik geratzen edozein zatian.

Iragazpena hasieratik prebenitzea

Konponketa egiturazkoa izen-diziplina eta tresna-mailako babesak dira:

  • Ez aurriztu inoiz service gakoa NEXT_PUBLIC_*, VITE_* edo bundle-an txertatzen duen beste edozein aurrizkiarekin. Izendapen-konbentzioa muga da — esparru orok errespetatzen du.
  • Mantendu service gakoa .env-tik kanpo erabat garatzailearen makinan. Irakurri sekretuen kudeatzaile batetik (Doppler, Infisical, Vercel-en zifratutako ingurune-aldagaiak) zabalpenean, inoiz ez berretsi tokian.
  • <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.
  • Gehitu CI ate bat eraikitze-irteera eskaneatzen duena. next build-en ondoren, grep .next/static/chunks/ irteera service_role katearen bila. Eraikuntzak huts egin dezala edozer bat datorren bada.
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

Maiz egiten diren galderak

Erasotzaileek zenbat azkar aurkitzen dituzte galdutako Supabase service-role gakoak?

Bundle publikoen eskanerrek zabalpen berriak minutuetan miatzen dituzte. Ikerlariek lehen zabalpenetik ordubete baino gutxiagora Supabase proiektu berrien aurka funtzionatzen duten ustiapenak dokumentatu dituzte. Tratatu edozein service-role agerpena 60 minutuko leiho gisa, ez 60 eguneko gisa.

Gakoa biratzea nahikoa al da, ala datu-exfiltrazioa hartu behar dut?

Errotazioak galdutako gakoa baliogabetzen du baina ez du dagoeneko jaitsitako daturik desegiten. Zure taulek PII, ordainketa-datuak edo araututako edozein datu badituzte, GDPR (72 ordu), CCPA edo HIPAAren araberako jakinarazpen-betebeharra izan dezakezu. Auditatu erregistroak eta kontsultatu legezko aholkulariarekin auditoretzak sarbide susmagarria erakusten badu.

RLSk babestu nazake service-role gakoa iragazten bada?

Ez. Errenkada-mailako segurtasuna erabat saihesten du service_role erreklamazioak. Hori da diseinua — gakoa zehazki zerbitzariaren kodeak admin eragiketetarako RLS saltatzeko da. Murrizketa gakoa erasotzaile batek irakur dezakeen testuinguru batera inoiz ez heltzen ziurtatzea da.

Aplikatzen al zaio Supabase argitaragarri / sekretu gako eredu berriari (<code>sb_publishable_</code> / <code>sb_secret_</code>)?

Bai — arrisku-klase berdina. sb_secret_* gakoa proiektu berriagoetarako service-role JWT-a ordezkatzen duen sekretu-gakoaren formatu berria da. Bundle batean sb_secret_* daraman edozein gauza galdutako service-role JWT bat bezain hondatzailea da. FixVibe bundle-secrets detektagailuak bi formak bat egiten ditu.

Eta anon / argitaragarri gakoa — segurua al da bundle-an?

Bai, diseinuz. Anon gakoa nabigatzailean bizitzeko diseinatuta dago eta Supabase web bezero bakoitzak erabiltzen duena da. Bere segurtasuna RLS taula publiko bakoitzean behar bezala konfiguratuta egotean datza erabat. Ikus Supabase RLS eskanerra artikulua egiaztatu beharreko gauzetarako.

Hurrengo urratsak

Egin FixVibe eskaneatze bat zure ekoizpen-URLaren aurka — bundle-secrets egiaztapena doakoa da, izen-emanik gabe, eta service_role agerpena minutu batean baino gutxiago jakinarazten du. Bikoiztu hau Supabase RLS eskanerra artikuluarekin RLS geruza bere lana egiten ari den egiaztatzeko, eta Supabase biltegiratze-ontziaren segurtasun-zerrenda-rekin fitxategi-sarbidea blokeatzeko. IA tresnek iragazte-klase hori hain fidagarriki zergatik sortzen duten ulertzeko, irakurri Zergatik IA kodetze-tresnek segurtasun-hutsuneak uzten dituzten.

// eskaneatu zure baas azalera

Aurkitu taula irekia beste norbaitek aurkitu baino lehen.

Sartu ekoizpen-URL bat. FixVibek zure aplikazioak hitz egiten dituen BaaS hornitzaileak zerrendatzen ditu, beren amaiera-puntu publikoen hatz-marka egiten du eta autentikatu gabeko bezero batek zer irakurri edo idatzi dezakeen jakinarazten du. Doan, instalaziorik gabe, txartelik gabe.

  • Doako maila — 3 eskaneatze hilean, izen-eman txartelik gabe.
  • BaaS hatz-marka pasiboa — ez da behar domeinu-egiaztapenik.
  • Supabase, Firebase, Clerk, Auth0, Appwrite eta gehiago.
  • IA konponketa-gonbitak aurkikuntza bakoitzean — itsatsi berriz Cursor / Claude Code-en.
Egin doako BaaS eskaneatze bat

ez da izen-ematerik behar

Supabase service role gakoa JavaScript-en agerian: zer esan nahi duen eta nola aurkitu — Docs · FixVibe