FixVibe

// docs / baas security / supabase service role exposure

Iuchair seirbheis-dreuchd Supabase air a foillseachadh ann an JavaScript: dè a tha e a' ciallachadh agus mar a lorgar e

'S e iuchair seirbheis-dreuchd Supabase prìomh-iuchair an stòir-dàta agad. Tha duine sam bith aig a bheil i a' seachnadh Tèarainteachd Sreath-ìre, 's urrainn dha gach colbh de gach clàr a leughadh, agus 's urrainn dha rud sam bith a sgrìobhadh no a dhubhadh às. Tha i air a dealbhadh airson fuireach a-mhàin ann an còd taobh an fhrithealaiche — chan ann sa bhrabhsair a-riamh. Nuair a chuireas inneal còdaidh AI gu bundle JavaScript i, tha an stòr-dàta agad gu bunaiteach poblach. Tha an t-artaigil seo a' mìneachadh cumadh a' JWT a tha ag aithneachadh iuchair a chaidh a-mach, na trì pàtrain innealan-AI a thig oirre, dè rinneas tu sa chiad uair às deidh lorg, agus mar a sganadh tu air a son gu fèin-obrachail mus dèan na cleachdaichean.

Dè a th' anns an iuchair seirbheis-dreuchd

Bidh Supabase a' cur a-mach dà iuchair eadar-dhealaichte airson gach pròiseact: an iuchair anon (cuideachd ris an canar an iuchair fhoillseachail ann am pròiseactan ùra) agus an iuchair service_role. Tha an dà chuid nan Comharran-lìn JSON air an soidhneadh le ruintean JWT a' phròiseict agad. Is e an diofar an tagradh role a tha air a bhèicearachd a-steach do phàigheadh a' JWT — anon airson na h-iuchrach poblach, service_role airson a' phrìomh iuchair. Bidh PostgREST, Stòras Supabase, agus Dearbhadh Supabase uile a' tionndadh gu modh seachnadh-uile nuair a chì iad an tagradh service_role.

Còd-mineachadh iuchair Supabase sam bith aig jwt.io agus seall air a' phàigheadh. Tha cumadh JWT seirbheis-dreuchd do-mhearachdach:

Pàigheadh còd-mhìnichte de JWT seirbheis-dreuchd (air a shealltainn mar bhloc-soillseachaidh-cànain gu h-ìosal).

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

Bidh pròiseactan Supabase nas ùire a' cur a-mach iuchraichean cumadh-dìomhair leis an ro-leasachan sb_secret_ an àite JWT. Tha an giùlan co-ionann — tha rud sam bith le sb_secret_ ann am bundle poblach a cheart cho tubaisteach.

Mar a bhios innealan còdaidh AI a' cur a-mach na h-iuchrach seirbheis-dreuchd

Tha sinn air na h-aon trì pàtrain fhaicinn thar mhìltean de dh'aplacaidean vibe-coded. Bidh gach fear a' tòiseachadh le leasaiche ag iarraidh cuideachadh bho inneal AI agus a' crìochnachadh leis an iuchair sheirbheis air a chur a-steach do bhundle.

Pàtran 1: Aon fhaidhle .env le ro-leasachan NEXT_PUBLIC_

Bidh an leasaiche ag iarraidh air an inneal AI "Supabase a stèidheachadh" agus a' gabhail ri aon .env leis an dà iuchair. Bidh an inneal AI — air a thrèanadh air corpas far a bheil a' mhòr-chuid de chaochladairean àrainneachd air am foillseachadh tro NEXT_PUBLIC_* — a' cur an ro-leasachan NEXT_PUBLIC_ air an dà chuid. Bidh Next.js a' cur rud sam bith a tha a' freagairt air an ro-leasachan sin a-steach don bhundle cliant aig àm togail. Cuir gu Vercel, agus tha an iuchair sheirbheis ann an main.[hash].js.

Pàtran 2: An iuchair cheàrr ann an gairm createClient

Bidh an leasaiche a' cur an dà iuchair a-steach do dh'fhaidhle config.ts a chruthaich an AI, agus bidh an AI a' lìonadh a' ghairm createClient() taobh a' bhrabhsair le process.env.SUPABASE_SERVICE_ROLE_KEY le mearachd. Bheir an togail an caochladair a-steach, agus tuitidh an JWT sa bhundle.

Pàtran 3: Iuchair seirbheis-dreuchd air a chrìoch-bhriseadh ann an sgriobtaichean sìl

Bidh an leasaiche ag iarraidh air an inneal AI sgriobt a sgrìobhadh a chuireas sìol san stòr-dàta. Bidh an AI a' crìoch-bhriseadh na h-iuchrach seirbheis-dreuchd gu dìreach a-steach don fhaidhle (an àite a leughadh bho àrainneachd), a' geallachadh an fhaidhle don stòr-tasgaidh, agus tha an stòr-tasgaidh poblach GitHub no slighe /scripts/seed.js na h-aplacaide a chaidh a chur a-mach a-nis a' frithealadh na h-iuchrach.

Mar a bhios sganadh bundle FixVibe a' lorg an leigeadh-a-mach

Bidh sgrùdadh nan dìomhair-bundle aig FixVibe a' luchdachadh sìos gach faidhle JavaScript air a bheilear a' toirt iomradh leis an aplacaid a chaidh a chur a-mach — pìosan tòiseachaidh, pìosan luchdachaidh-leisg, luchd-obrach lìn, luchd-obrach seirbheise — agus gan ruith tro lorgaiche a tha a' còd-mhìneachadh rud sam bith a fhreagras air cumadh JWT (eyJ[base64-header].eyJ[base64-payload].[signature]). Ma tha am pàigheadh còd-mhìnichte a' cumail "role": "service_role", aithrisidh an sgan e mar lorg èiginneach leis an t-slighe-faidhle agus an dearbh-loidhne far a bheil an iuchair a' nochdadh. Tha an aon sgrùdadh cuideachd a' freagairt air a' phàtran ùr sb_secret_* le ro-leasachan.

Cha dèan an sgan dearbhadh leis an iuchair a lorgadh a-riamh. Aithnichidh i an cumadh agus aithrisidh i an leigeadh-a-mach — bhiodh cleachdadh na h-iuchrach airson dearbhadh gun obraich i na ruigsinn neo-cheadaichte don stòr-dàta agad. Tha an dearbhadh sa phàigheadh JWT fhèin.

Air a lorg — dè rinneas tu sa chiad uair

Tha iuchair seirbheis-dreuchd a chaidh a-mach na èiginn aig àm-ruith. Saoil gun deach an iuchair a sgrìobadh — bidh luchd-ionnsaigh a' coimhead air bundles poblach ann an àm fìor. Dèilig ris an stòr-dàta mar gun deach a chur an cunnart gus an cuir thu cuairt air an iuchair agus an sgrùd thu gnìomhachd o chionn ghoirid.

  1. Cuir cuairt air an iuchair sa bhad. Ann an Dashboard Supabase, rach gu Roghainnean Pròiseict → API → Iuchair seirbheis-dreuchd → Ath-shuidhich. Tha an t-seann iuchair air a cur à neart ann an diog. Feumaidh gach còd taobh-seirbheise a tha a' cleachdadh na h-iuchrach a bhith air ùrachadh agus air a chur a-mach a-rithist mus laigh an cuairt.
  2. Sgrùd gnìomhachd an stòir-dàta o chionn ghoirid. Fosgail Stòr-dàta → Logaichean san dashboard. Sìolaich air na 7 latha mu dheireadh. Lorg ceistean SELECT * neo-àbhaisteach an aghaidh clàran le PII, aithrisean mòra UPDATE no DELETE, agus iarrtasan bho IPan taobh a-muigh do bhun-structair aithnichte. Bidh Supabase a' clàradh a' chinn x-real-ip air gach iarrtas.
  3. Sgrùd nithean stòrais. Rach gu Stòras → Logaichean agus sgrùd luchdaidhean-sìos faidhle o chionn ghoirid. Bheir iuchair seirbheis-dreuchd a chaidh a-mach ruigsinn-uile gu bucaidean prìobhaideach cuideachd.
  4. Thoir an iuchair a-mach à smachd-stòir. Fiù 's às dèidh cuairteachadh, tha fàgail an JWT ann an eachdraidh git agad a' ciallachadh gu bheil e ri lorg san stòr-tasgaidh poblach. Cleachd git filter-repo no BFG Repo-Cleaner gus a sgùradh bhon eachdraidh, agus an uairsin push-èigneachail (rabhaich an luchd-cho-obrach an toiseach).
  5. Ath-sganaich às dèidh càraidh. Ruith sgan FixVibe ùr an aghaidh na h-aplacaide ath-chuir-a-mach. Bu chòir don lorg dìomhairean-bundle falbh. Dearbh nach eil JWT service_role agus nach eil sreang sb_secret_* air fhàgail ann am pìos sam bith.

A' cur bacadh air an leigeadh-a-mach sa chiad àite

'S e an càradh structarail smachd ainmeachaidh agus geàrdan aig ìre nan innealan:

  • Na cuir ro-leasachan an iuchair sheirbheis le NEXT_PUBLIC_*, VITE_*, no ro-leasachan a-steach-bundle sam bith eile a-riamh. 'S e an gnàth-ainmeachadh a' chrìoch — cumaidh gach frèam-obrach ris.
  • Cum an iuchair sheirbheis a-mach à .env gu tur air inneal an leasaiche. Leugh i bho mhanaidsear dìomhair (Doppler, Infisical, caochladairean àrainneachd crioptaichte Vercel) air a chur a-mach, na geall gu ionadail a-riamh.
  • <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.
  • Cuir ris geata CI a sganas an toradh togail. Às dèidh next build, greas air an toradh .next/static/chunks/ airson na sreang service_role. Fàillig an togail ma fhreagras dad.
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

Ceistean Cumanta

Dè cho luath 's a lorgas luchd-ionnsaigh iuchraichean seirbheis-dreuchd Supabase a chaidh a-mach?

Bidh sganairean bundle poblach a' trolladh cuir-a-mach ùra ann am mionaidean. Tha rannsachadairean air feumannan a chlàradh an aghaidh phròiseactan Supabase ùra ann an nas lugha na uair a thìde bhon chiad chuir-a-mach. Dèilig ri foillseachadh seirbheis-dreuchd sam bith mar uinneag 60-mionaid, chan e 60-latha.

An leòr cuairteachadh na h-iuchrach, no a bheil agam ri creidsinn gun deach dàta a thoirt air falbh?

Cuiridh cuairteachadh an iuchair a chaidh a-mach à neart ach cha dèan e ais-thilleadh air dàta a chaidh a tharraing mu thràth. Ma tha PII, dàta pàighidh, no dàta riaghlaichte sam bith anns na clàran agad, dh'fhaodadh dleastanas-fios a bhith ort fo GDPR (72 uair), CCPA, no HIPAA. Sgrùd na logaichean agus bruidhinn ri comhairliche laghail ma sheallas an sgrùdadh ruigsinn amharasach.

An urrainn do RLS mo dhìon ma thèid an iuchair seirbheis-dreuchd a-mach?

Chan urrainn. Tha Tèarainteachd Sreath-ìre air a seachnadh gu tur leis an tagradh service_role. Tha sin a dh'aon ghnothach — tha an iuchair ann gu mion-shònraichte airson 's gun urrainn do chòd cùl-taic RLS a leigeil seachad airson obraichean rianachd. 'S e am mitigation a bhith a' dèanamh cinnteach nach ruig an iuchair co-theacsa far an urrainn do dh'ionnsaighiche a leughadh.

An buin seo do mhodail iuchair foillseachail / dìomhair Supabase ùr (<code>sb_publishable_</code> / <code>sb_secret_</code>)?

Buinidh — an aon chunnart-chlas. 'S e an iuchair sb_secret_* an cruth-iuchrach dìomhair ùr a chuireas an àite an JWT seirbheis-dreuchd airson pròiseactan ùra. Tha rud sam bith le sb_secret_* ann am bundle a cheart cho tubaisteach ri JWT seirbheis-dreuchd a chaidh a-mach. Bidh lorgaiche dìomhairean-bundle FixVibe a' freagairt air an dà chumadh.

Dè mun iuchair anon / fhoillseachail — a bheil sin sàbhailte sa bhundle?

Tha, a dh'aon ghnothach. Tha an iuchair anon airson fuireach sa bhrabhsair agus 's i a chleachdas gach cliant lìn Supabase. Tha a tèarainteachd an crochadh gu tur air RLS a bhith air a rèiteachadh gu ceart air gach clàr poblach. Faic an artaigil Sganair RLS Supabase airson dè a sgrùdas tu.

An ath cheum

Ruith sgan FixVibe an aghaidh URL a' chinneasachaidh agad — tha an sgrùdadh dìomhairean-bundle an-asgaidh, gun chlàradh, agus aithrisidh e foillseachadh service_role ann am beagan nas lugha na mionaid. Cuir seo còmhla ris an artaigil Sganair RLS Supabase gus dearbhadh gu bheil an ìre RLS a' dèanamh a dleastanas, agus an Liosta-sgrùdaidh tèarainteachd bhucaidean stòrais Supabase gus glasadh a chur air ruigsinn fhaidhle. Airson cùl-fhiosrachadh mu carson a bhios innealan AI a' cruthachadh a' chlas leigidh-a-mach seo cho cunbhalach, leugh Carson a tha innealan còdaidh AI a' fàgail beàrnan tèarainteachd.

// sganaich uachdar baas agad

Lorg an clàr fosgailte mus lorg cuideigin eile e.

Cuir a-steach URL cinneasachaidh. Nì FixVibe àireamhachadh air na solaraichean BaaS leis a bheil an aplacaid agad a' bruidhinn, lorgaidh e am puingean-deiridh poblach, agus aithrisidh e na as urrainn do chliant gun dearbhadh leughadh no sgrìobhadh. An-asgaidh, gun stàladh, gun chairt.

  • Sreath an-asgaidh — 3 sganaidhean sa mhìos, gun chairt clàraidh.
  • Comharrachadh BaaS fulangach — chan eil dearbhadh seilbh àrainn a dhìth.
  • Supabase, Firebase, Clerk, Auth0, Appwrite agus barrachd.
  • Cur-thairis càraidh AI air gach toradh — cuir air ais e gu Cursor / Claude Code.
Ruith sganadh BaaS an-asgaidh

gun chlàradh a dhìth

Iuchair seirbheis-dreuchd Supabase air a foillseachadh ann an JavaScript: dè a tha e a' ciallachadh agus mar a lorgar e — Docs · FixVibe