// docs / baas security / supabase rls scanner
Eskanè RLS Supabase: jwenn tab ki gen sekirite nan nivo ranje ki manke oswa ki kraze
Sekirite nan nivo ranje (RLS) se sèl bagay ki kanpe ant done kliyan ou yo ak entènèt la lè ou voye yon aplikasyon ki bati sou Supabase. Zouti kodaj IA yo jenere kòd ki gen fòm RLS ki konpile, voye, epi an silans pèdi done — tab kreye san RLS aktive, politik ki li men pa janm restriksyon, predikatab ki konpare yon kolòn ak tèt li. Atik sa a montre sa yon eskanè RLS Supabase kapab pwouve depi deyò, kat fòm RLS-kraze ki parèt nan aplikasyon kodaj-vibe, epi kijan pou eskane pwòp deplwaman ou anba yon minit.
Sa yon eskanè RLS ekstèn kapab pwouve
Yon eskanè RLS pasif mache kont pwen-fen PostgREST ke Supabase ekspoze nan https://[project].supabase.co/rest/v1/. Li sèlman itilize kle anon piblik la — menm kle navigatè ou a itilize — epi li sond pou meta-done lis tab, lekti anonim, ak ekriti anonim. Li pa janm otantifye kòm yon itilizatè epi pa janm manyen privilèj service-role. Tout sa li ka fè, yon atakè ki pa otantifye sou entènèt la kapab fè li.
Depi deyò baz done a, yon eskanè kapab konfime sa ki annapre yo ak gwo konfyans:
- RLS dezaktive sou yon tab. PostgREST retounen ranje pou yon
SELECTanonim lè RLS dezaktive oswa lè yon politik pèmèt li. Toulède ka se yon dekouvèt. - Wòl anonim nan kapab liste tab yo. Yon
GET /rest/v1/ak kle anon retounen eskèma OpenAPI pou chak tab ke wòlanonnan gen nenpòt privilèj sou li. Aplikasyon jenere pa IA souvan bayUSAGEsou eskèma a akSELECTsou chak tab, sa ki ekspoze tout kat eskèma a menm lè RLS refize lekti aktyèl yo. - Wòl anonim nan kapab ensere. Yon
POSTsondaj ak yon devine sou fòm kolòn nan ap reyisi si RLS pa gen yon politikINSERTki refize li — menm siSELECTbloke. - Kle service-role la nan pakèt navigatè a. Akote RLS: si yon eskanè jwenn
SUPABASE_SERVICE_ROLE_KEYoswa nenpòt JWT akrole: service_rolenan pakèt JavaScript la, RLS pa enpòtan — moun ki kenbe kle sa a kontoune chak politik.
Sa yon eskanè ekstèn pa kapab pwouve
Fè onèt sou limit eskanè a. Yon eskanè RLS ekstèn pa kapab li tab pg_policies ou a, dosye migrasyon ou yo, oswa predikat egzak nenpòt politik. Li enfere apati konpòtman bwat-nwa, sa ki vle di li va pafwa rapòte yon dekouvèt ki tounen se done piblik volontè (yon tab bilten maketing, yon katalòg pwodwi piblik). Rapò FixVibe make sa yo kòm konfyans mwayèn lè eskanè a pa ka dezambigye entansyon — egzamine non tab la epi deside.
Kat fòm RLS-kraze zouti IA yo pwodwi
Lè ou pwente Cursor, Claude Code, Lovable, oswa Bolt sou Supabase, menm kat modèl RLS-kraze yo parèt nan dè milye aplikasyon. Chak youn pase tcheke-tip, konpile, epi voye:
Fòm 1: RLS pa janm aktive
Mòd echèk ki pi komen. Migrasyon an kreye tab la men devlopè a (oswa zouti IA a) bliye ALTER TABLE ... ENABLE ROW LEVEL SECURITY. PostgREST kontan sèvi tout tab la bay nenpòt moun ki gen kle anon nan. Ranjman: ALTER TABLE public.[name] ENABLE ROW LEVEL SECURITY; ALTER TABLE public.[name] FORCE ROW LEVEL SECURITY;. FORCE pa opsyonèl — san li mèt tab la (epi nenpòt wòl ki gen pwopriyete tab) kontoune RLS.
ALTER TABLE public.[name] ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.[name] FORCE ROW LEVEL SECURITY;Fòm 2: RLS aktive, pa gen politik
Yon echèk pi sibtil. RLS aktive men pa gen politik ki ekri. Default nan PostgreSQL se refize, kidonk itilizatè otantifye pa wè anyen — epi devlopè a ajoute USING (true) pou fè aplikasyon an mache, sa ki pèmèt tout moun li tout bagay. Ranjman: ekri yon politik ki pòte sou auth.uid(): CREATE POLICY "select_own" ON public.[name] FOR SELECT USING (auth.uid() = user_id); ak yon politik INSERT/UPDATE/DELETE ki koresponn.
CREATE POLICY "select_own"
ON public.[name]
FOR SELECT
USING (auth.uid() = user_id);Fòm 3: Politik konpare kolòn ak tèt li
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.
Fòm 4: Politik sou SELECT men pa sou INSERT/UPDATE
Devlopè a bloke lekti men bliye ekriti. Politik RLS yo se pa-kòmand. FOR SELECT pwoteje sèlman lekti; yon kliyan anonim toujou kapab INSERT si pa gen politik ki refize li. Ranjman: ekri yon politik pa kòmand, oswa itilize FOR ALL ak klauz USING ak WITH CHECK eksplisit.
Kijan eskanè RLS Supabase FixVibe a mache
Tcheke baas.supabase-rls mache nan twa etap, chak ak nivo konfyans eksplisit:
- Etap 1 — anprent. Eskanè a fouye aplikasyon ki deplwaye a, analize pakèt JavaScript li a, epi ekstrè URL pwojè Supabase ak kle anon ki soti nan konfigirasyon ekzekisyon an. Pa gen devinèt DNS, pa gen fòs-brital — li li sa navigatè a li.
- Etap 2 — dekouvèt eskèma. Yon sèl
GET /rest/v1/ak kle anon nan retounen eskèma OpenAPI pou chak tab wòl anon nan kapab wè. Eskanè a anrejistre non tab men li pa li done ranje nan etap sa a. - Etap 3 — sondaj lekti ak ekriti. Pou chak tab dekouvri, eskanè a voye yon
SELECTanonim aklimit=1. Si ranje retounen, RLS pèmisif. Eskanè a kanpe la — li pa enimere ranje, li pa pajinasyon, li pa modifye done. Sondaj INSERT yo bloke dèyè verifikasyon pwopriyete domèn ak opt-in eksplisit; yo pa janm tire kont sib ki pa verifye.
Chak dekouvèt vini ak URL demand egzak, sitiyasyon repons, fòm repons (sèlman antèt), ak non tab la. Pwòp ranjman IA nan pati anba dekouvèt la se yon blòk SQL kopye-kole ke ou mache nan editè SQL Supabase.
Sa pou fè lè eskanè a jwenn yon bagay
Chak dekouvèt RLS se yon ijans ekzekisyon. Atakè eskane pwen-fen PostgREST piblik yo nan minit. Sekans remed la se mekanik:
- Odit chak tab. Mache
SELECT schemaname, tablename, rowsecurity FROM pg_tables WHERE schemaname = 'public';nan editè SQL Supabase. Nenpòt ranje akrowsecurity = falsese yon pwoblèm. - Aktive RLS sou chak tab piblik. Pa default sou
ENABLE ROW LEVEL SECURITYakFORCE ROW LEVEL SECURITYsou chak tab ki kreye — fè li yon modèl migrasyon. - Ekri politik kòmand-pa-kòmand. Pa itilize
FOR ALL USING (true). Ekri politik eksplisit pou SELECT, INSERT, UPDATE, DELETE — chak youn pòte souauth.uid()oswa yon kolòn org-id soti nanauth.jwt(). - Verifye ak yon dezyèm kont. Enskri kòm yon lòt itilizatè, eseye li dosye yon lòt itilizatè dirèkteman via REST API. Si repons lan se
200, politik la kraze. - Re-eskane. Apre aplike ranjman an, re-lanse yon eskanè FixVibe kont menm URL la. Dekouvèt
baas.supabase-rlsnan ta dwe efase.
-- 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;Kijan sa konpare ak lòt eskanè
Pifò zouti DAST jenerik (Burp Suite, OWASP ZAP, Nessus) pa konnen ki sa PostgREST ye. Y ap fouye aplikasyon ou a, inyore chemen /rest/v1/, epi rapòte sou paj HTML yo konprann. Snyk ak Semgrep se zouti analiz estatik — yo jwenn dosye migrasyon nan depo ou ak apèl RLS ki manke, men yo pa kapab pwouve baz done deplwaye a move konfigire. FixVibe chita nan vid la: pasif, konsyan-BaaS, konsantre sou sa yon atakè ki pa otantifye kapab pwouve depi URL piblik la.
Kesyon ki poze souvan
Èske eskanè a ap li oswa modifye done m yo?
Non. Eskanè pasif voye omaksimòm yon SELECT ... limit=1 pa tab dekouvri pou konfime èske RLS pèmèt lekti anonim. Eskanè a anrejistre fòm repons lan, pa kontni ranje yo. Sondaj INSERT, UPDATE, ak DELETE bloke dèyè verifikasyon pwopriyete domèn epi pa janm mache kont sib ki pa verifye.
Èske sa mache si pwojè Supabase mwen an an poz oswa sou yon domèn pèsonalize?
Pwojè an poz retounen 503 sou chak demand — eskanè a rapòte pwojè a kòm pa ka jwenn. Domèn pèsonalize mache toutotan aplikasyon deplwaye a toujou chaje SDK kliyan Supabase nan navigatè a; eskanè a ekstrè URL pwojè a soti nan pakèt la nenpòt fason.
Sa k ap pase si kle anon mwen woule oswa kle piblikab mwen chanje?
Re-lanse eskanè a. Eskanè a re-ekstrè kle a soti nan pakèt aktyèl la sou chak kouri. Rotasyon anile sèlman rapò anvan an, pa eta politik baz done a.
Èske eskanè a tcheke nouvo modèl kle piblikab Supabase (<code>sb_publishable_*</code>)?
Wi. Detèktè a rekonèt tou de eritaj anon JWT ak nouvo kle sb_publishable_* yo epi trete yo menm jan — tou de gen entansyon pou yo piblik epi tou de kite RLS kòm sèl liy defans.
Etap pwochèn
Lanse yon eskanè FixVibe gratis kont URL pwodiksyon ou — tcheke baas.supabase-rls aktive sou chak plan ki gen ladan nivo gratis la. Pou yon lekti pi pwofon sou sa lòt bagay ki kapab koule nan yon pwojè Supabase, gade Kle service-role Supabase ekspoze nan JavaScript ak Lis tcheke sekirite bokè depo Supabase. Pou view parapli atravè tout founisè BaaS yo, li Eskanè move konfigirasyon BaaS.
