FixVibe

// docs / baas security / supabase rls scanner

Sikana RLS Supabase: chọta tebụl na-enweghị ma ọ bụ nke gbajiri agbaji nchekwa larịị ahịrị

Nchekwa larịị ahịrị (RLS) bụ naanị ihe na-eguzo n'etiti data ndị ahịa gị na ịntanetị mgbe ị na-eziga ngwa nke Supabase na-akwado. Ngwa ihe nkuzi koodu AI na-emepụta koodu nwere ụdị RLS nke na-achịkọta, na-eziga, ma na-ezipụ data n'enweghị uzu — tebụl emepụtara na-enweghị RLS akwadoro, atumatu na-agụ mana enweghị nke ọ bụla na-amachi, ihe ntule na-atụnyere ogidi na onwe ya. Edemede a na-egosi ihe sikana RLS Supabase nwere ike igosi site n'èzí, ụdị RLS gbajiri agbaji anọ na-egosi na ngwa vibe-coded, na otu esi enyocha mbubata gị n'ime nkeji.

Ihe nyocha RLS nke èzí nwere ike igosi

Nyocha RLS na-anaghị eme ihe na-agba megide PostgREST endpoint nke Supabase na-ekpughe na https://[project].supabase.co/rest/v1/. Ọ na-eji naanị igodo anon a na-ebipụta — otu igodo nchọgharị gị na-eji — ma nyochaa metadata ndepụta tebụl, ọgụgụ na-enweghị aha, na ide na-enweghị aha. Ọ dịghị mgbe ọ na-enye njirimara dị ka onye ọrụ ma ọ dịghị emetụ ihe ruru eru nke ọrụ-eke aka. Ihe ọ bụla ọ nwere ike ime, onye ọ na-awakpo na-enweghị nkwenye n'ịntanetị nwere ike ime.

Site n'èzí nke ọdụ data, sikana nwere ike kwado ndị a na nkwenye dị elu:

  • A gbanyụrụ RLS na tebụl. PostgREST na-eweghachi ahịrị maka SELECT na-enweghị aha mgbe RLS gbanyụrụ ma ọ bụ mgbe iwu na-enye ya ohere. Ọnọdụ ọ bụla bụ nchọpụta.
  • Ọrụ na-enweghị aha nwere ike ịdepụta tebụl. GET /rest/v1/ nwere igodo anon na-eweghachi nhazi OpenAPI maka tebụl ọ bụla nke ọrụ anon nwere ihe ọ bụla. Ngwa AI mepụtara na-enye USAGE na schema na SELECT na tebụl ọ bụla, nke na-ekpughe map schema zuru oke ọbụlagodi mgbe RLS na-egbochi ọgụgụ n'ezie.
  • Ọrụ na-enweghị aha nwere ike itinye. Nyocha POST nwere amụma na ọdịdị ogidi ga-aga nke ọma ma ọ bụrụ na RLS enweghị iwu INSERT na-egbochi ya — ọbụlagodi ma SELECT kpọchiri.
  • Igodo ọrụ-eke dị n'ime ngwakọta nchọgharị. N'akụkụ RLS: ọ bụrụ na sikana achọta SUPABASE_SERVICE_ROLE_KEY ma ọ bụ JWT ọ bụla nwere role: service_role n'ime ngwakọta JavaScript, RLS abaghị uru — onye ji igodo ahụ na-agafe iwu ọ bụla.

Ihe nyocha èzí enweghị ike igosi

Kwuo eziokwu maka oke nke sikana. Nyocha RLS èzí enweghị ike ịgụ tebụl pg_policies gị, faịlụ mbugharị gị, ma ọ bụ ihe ntule kpọmkwem nke iwu ọ bụla. Ọ na-amata site na omume akpa ojii, nke pụtara na ọ ga-akọ nchọpụta mgbe ụfọdụ nke ga-abụ data ọha ebumnobi (tebụl akwụkwọ akụkọ azụmahịa, katalọgụ ngwaahịa ọha). Akụkọ FixVibe na-akara ndị a dị ka nkwenye etiti mgbe sikana enweghị ike ịkọwapụta ebumnobi — leghachi aha tebụl ma kpebie.

Ụdị RLS gbajiri agbaji anọ nke ngwa AI na-emepụta

Mgbe ị tụụrụ Cursor, Claude Code, Lovable, ma ọ bụ Bolt na Supabase, otu ụdị RLS gbajiri agbaji anọ na-apụta n'ọtụtụ puku ngwa. Nke ọ bụla na-agafe nyocha ụdị, na-achịkọta, ma na-eziga:

Ụdị 1: Etinyebeghị RLS

Ụzọ ọdịda kachasị. Mbugharị na-emepụta tebụl mana onye mmepe (ma ọ bụ ngwa AI) na-echezọ ALTER TABLE ... ENABLE ROW LEVEL SECURITY. PostgREST na-eji obi ụtọ na-eweta tebụl niile nye onye nwere igodo anon. Ndozi: ALTER TABLE public.[name] ENABLE ROW LEVEL SECURITY; ALTER TABLE public.[name] FORCE ROW LEVEL SECURITY;. FORCE abụghị nhọrọ — na-enweghị ya, onye nwe tebụl (na ọrụ ọ bụla nwere ikike inwe tebụl) na-agafe RLS.

sql
ALTER TABLE public.[name] ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.[name] FORCE  ROW LEVEL SECURITY;

Ụdị 2: RLS akwadoro, enweghị iwu

Ọdịda dị nro karịa. A na-akwado RLS mana edeghị iwu. Ndabara na PostgreSQL bụ jụ, ya mere ndị ọrụ enwere njirimara anaghị ahụ ihe ọ bụla — onye mmepe na-agbakwunye USING (true) ka ngwa rụọ ọrụ, nke na-enye onye ọ bụla ohere ịgụ ihe niile. Ndozi: dee iwu nke auth.uid() na-akọwapụta: CREATE POLICY "select_own" ON public.[name] FOR SELECT USING (auth.uid() = user_id); na iwu INSERT/UPDATE/DELETE dabara adaba.

sql
CREATE POLICY "select_own"
  ON public.[name]
  FOR SELECT
  USING (auth.uid() = user_id);

Ụdị 3: Iwu na-atụnyere ogidi na onwe ya

A copy-paste artefact. The developer writes <code>USING (user_id = user_id)</code> — which is always true — instead of <code>USING (auth.uid() = user_id)</code>. Type-checks pass; the policy permits every row. <strong>Fix:</strong> always compare a column to a function call (<code>auth.uid()</code>, <code>auth.jwt()->>'org_id'</code>, etc.), never to itself or to a constant.

Ụdị 4: Iwu na SELECT mana ọ bụghị na INSERT/UPDATE

Onye mmepe na-akpọchi ọgụgụ mana echefuru ide. Iwu RLS bụ kwa-iwu. FOR SELECT na-echebe naanị ọgụgụ; onye ahịa na-enweghị aha nwere ike INSERT ma ọ bụrụ na enweghị iwu na-egbochi ya. Ndozi: dee iwu kwa iwu, ma ọ bụ jiri FOR ALL nwere nkebi ahịrị USING na WITH CHECK doro anya.

Etu sikana RLS Supabase FixVibe si arụ ọrụ

Nyocha baas.supabase-rls na-agba na nzọụkwụ atọ, nke ọ bụla nwere ọkwa nkwenye doro anya:

  1. Nzọụkwụ 1 — akara akara. Sikana na-akpụgharị ngwa ezigara, na-atụgharị ngwakọta JavaScript ya, ma na-ewepụta URL ọrụ Supabase na igodo anon site na nhazi mgbe ọ na-agba ọsọ. Enweghị atụmatụ DNS, enweghị mmanye — ọ na-agụ ihe nchọgharị na-agụ.
  2. Nzọụkwụ 2 — nchọpụta schema. Otu GET /rest/v1/ nwere igodo anon na-eweghachi nhazi OpenAPI maka tebụl ọ bụla nke ọrụ anon nwere ike ịhụ. Sikana na-edekọ aha tebụl mana adịghị agụ data ahịrị na nzọụkwụ a.
  3. Nzọụkwụ 3 — nyocha agụ na ede. Maka tebụl ọ bụla achọpụtara, sikana na-enye otu SELECT na-enweghị aha nwere limit=1. Ọ bụrụ na ahịrị laghachi, RLS na-enye ohere. Sikana na-akwụsị ebe ahụ — ọ dịghị edepụta ahịrị, ọ dịghị peejị, ma ọ dịghị emezi data. Nyocha INSERT na-eche n'okpuru nkwenye nwetara ngalaba na nhọrọ doro anya; ha anaghị agba megide ihe e nwetabeghị nkwenye.

Nchọpụta ọ bụla na-eziga na URL arịrịọ kpọmkwem, ọnọdụ azịza, ọdịdị azịza (naanị isi), na aha tebụl. Ntugharị ndozi AI na ala nke nchọpụta bụ ngọngọ SQL detịnye-mapụta nke ị na-agba na nhazi SQL Supabase.

Ihe ị ga-eme mgbe sikana chọtara ihe

Nchọpụta RLS ọ bụla bụ ihe ngwa ngwa mgbe ọ na-agba ọsọ. Endpoint PostgREST ọha na-anata nyocha site n'aka ndị na-awakpo n'ime nkeji. Usoro nrụzigharị bụ ihe mmemme:

  1. Nyochaa tebụl ọ bụla. Gbaa SELECT schemaname, tablename, rowsecurity FROM pg_tables WHERE schemaname = 'public'; na nhazi SQL Supabase. Ahịrị ọ bụla nwere rowsecurity = false bụ nsogbu.
  2. Mee ka RLS rụọ ọrụ na tebụl ọha ọ bụla. Ndabara gaa na ENABLE ROW LEVEL SECURITY na FORCE ROW LEVEL SECURITY na tebụl ọ bụla emepụtara — mee ya nhazi mbugharị.
  3. Dee iwu kwa iwu. Ejila FOR ALL USING (true). Dee iwu doro anya maka SELECT, INSERT, UPDATE, DELETE — nke ọ bụla na-akọwa na auth.uid() ma ọ bụ ogidi org-id sitere na auth.jwt().
  4. Kwado na akaụntụ nke abụọ. Debanye aha dị ka onye ọrụ dị iche, gbalịa ịgụ ndekọ onye ọzọ site na REST API kpọmkwem. Ọ bụrụ na azịza bụ 200, iwu gbajiri agbaji.
  5. Nyocha ọzọ. Mgbe etinyere ndozi, gbaa nyocha FixVibe ọzọ megide otu URL. Nchọpụta baas.supabase-rls ga-ehichapụ.
sql
-- Audit every table for missing RLS. Run in the Supabase SQL editor.
SELECT schemaname, tablename, rowsecurity
FROM   pg_tables
WHERE  schemaname = 'public'
ORDER  BY rowsecurity, tablename;

Etu nke a si atụnyere sikana ndị ọzọ

Ọtụtụ ngwá ọrụ DAST n'ozuzu (Burp Suite, OWASP ZAP, Nessus) amaghị ihe PostgREST bụ. Ha ga-akpụgharị ngwa gị, leghara ụzọ /rest/v1/ anya, ma na-akọ akụkọ na ibe HTML ha ghọtara. Snyk na Semgrep bụ ngwá ọrụ nyocha kpụ ọkụ — ha na-achọta faịlụ mbugharị na repo gị nke enweghị ọkpụkpọ RLS, mana ha enweghị ike igosi na ọdụ data ezigara ahaziri nke ọma. FixVibe nọrọ n'oghere: na-anaghị eme ihe, mara BaaS, lekwasịrị anya na ihe onye na-awakpo na-enweghị nkwenye nwere ike igosi site na URL ọha.

Ajụjụ a na-ajụkarị

Sikana ga-agụ ma ọ bụ gbanwee data m?

Mba. Nyocha na-anaghị eme ihe na-enye opekata mpe otu SELECT ... limit=1 kwa tebụl achọpụtara iji kwado ma RLS na-enye ohere ọgụgụ na-enweghị aha. Sikana na-edekọ ọdịdị azịza, ọ bụghị ọdịnaya ahịrị. Nyocha INSERT, UPDATE, na DELETE na-eche n'okpuru nkwenye nwetara ngalaba ma ọ dịghị mgbe na-agba megide ihe e nwetabeghị nkwenye.

Nke a ọ na-arụ ọrụ ma ọ bụrụ na ọrụ Supabase m na-akwụsịtụ ma ọ bụ na ngalaba omenala?

Ọrụ akwụsịtụrụ na-eweghachi 503 na arịrịọ ọ bụla — sikana na-akọ ọrụ ahụ dị ka enweghị ike iru. Ngalaba omenala na-arụ ọrụ ma ọ bụrụ na ngwa ezigara ka na-ebu SDK onye ahịa Supabase na nchọgharị; sikana na-ewepụta URL ọrụ na ngwakọta ụzọ ọ bụla.

Gịnị ma ọ bụrụ na e gbanwere igodo anon m ma ọ bụ igodo nbipụta m gbanwere?

Mee nyocha ọzọ. Sikana na-ewepụtaghachi igodo na ngwakọta ugbu a na nyocha ọ bụla. Mgbanwe na-emeghị ka akụkọ gara aga ghara ịdị irè, ọ bụghị ọnọdụ iwu nke ọdụ data.

Sikana ọ na-enyocha ụdị igodo nbipụta Supabase ọhụrụ (<code>sb_publishable_*</code>)?

Ee. Ndị nchọpụta na-amata ma JWT anon ochie ma igodo sb_publishable_* ọhụrụ ma na-emeso ha otu — ha abụọ bụ maka iji bụrụ ọha ma ha abụọ na-ahapụ RLS dị ka naanị ahịrị nchekwa.

Nzọụkwụ na-esote

Gbaa nyocha FixVibe efu megide URL mmepụta gị — nyocha baas.supabase-rls na-arụ ọrụ na atụmatụ ọ bụla gụnyere ọkwa efu. Maka ọgụgụ miri emi maka ihe ọzọ nwere ike isi na ọrụ Supabase pụta, hụ Igodo ọrụ-eke Supabase ekpughere na JavaScript na Akwụkwọ ndepụta nchekwa ihe nchekwa Supabase. Maka echiche zuru ezu na ndị niile na-eweta BaaS, gụọ Sikana nhazi adịghị mma BaaS.

// nyochaa elu BaaS gị

Chọta tebụl mepere emepe tupu mmadụ ọzọ achọta ya.

Tinye URL mmepụta. FixVibe na-edepụta ndị na-eweta BaaS nke ngwa gị na-akpọrịta okwu, na-akara akara ya nke ọha, ma na-akọ ihe onye ahịa na-enweghị nkwenye nwere ike ịgụ ma ọ bụ dee. Efu, enweghị ntinye, enweghị kaadị.

  • Ọkwa efu — nyocha 3 / ọnwa, enweghị kaadị edebanye aha.
  • Akara akara BaaS na-anaghị eme ihe — enweghị mkpa nkwenye ngalaba.
  • Supabase, Firebase, Clerk, Auth0, Appwrite, na ndị ọzọ.
  • Ntugharị ndozi AI na nchọpụta ọ bụla — gbanye azụ na Cursor / Claude Code.
Gbaa nyocha BaaS efu

enweghị mkpa edebanye aha

Sikana RLS Supabase: chọta tebụl na-enweghị ma ọ bụ nke gbajiri agbaji nchekwa larịị ahịrị — Docs · FixVibe