Supabase RLS Scan
test je anon-key in 30 seconden
Plak je Supabase project-URL plus anon-key en krijg een lijst met tabellen die data teruggeven zonder login. Voor Lovable, Bolt, Cursor en v0-apps die zonder bewuste RLS-prompt zijn gegenereerd.
Supabase zet Row-Level Security niet automatisch aan op nieuwe tabellen. AI-coding-tools vragen er zelden naar in hun default-prompts. Resultaat: de anon-key in je client-side bundle kan vaak tabellen lezen waar geen ingelogde gebruiker voor nodig zou moeten zijn. Deze scan vindt die tabellen voor jou.
Scan je Supabase-project
Alles draait client-side in je browser. Je keys worden nergens opgeslagen of doorgestuurd.
De anon-key staat in je client-side code. Vind hem in Supabase dashboard onder Project Settings, API. Plak NOOIT je service-role-key (die hoort alleen server-side).
Hoe werkt deze scan?
De scanner stuurt vanaf jouw browser HTTP-requests naar je eigen Supabase-project. Voor elke common-table-naam (25 standaard plus eventuele hints) proberen we een SELECT met de anon-key. Als de tabel data teruggeeft zonder 401-foutmelding, is RLS niet correct geconfigureerd en is de tabel exposed.
Wat de scan WEL test
- anon-SELECT op 25 common-table-namen plus alles wat via PGRST205-orakel wordt gehint.
- count=exact om de tabel-grootte te lezen. Soms is dit het enige wat lekt (count=planned-bypass).
- kolom-namen uit de eerste rij, zodat je ziet welke PII-velden exposed zijn (email, phone, address).
Wat de scan NIET test
- anon-INSERT en anon-PATCH (potentieel destructief, vergt expliciete opdracht)
- Realtime WebSocket-publication (alleen via @supabase/supabase-js client testbaar)
- Storage bucket policies (apart endpoint, aparte logica)
- Edge Functions, RPC-execution, JWT-config, OAuth-flows
- Voor volledige dekking, zie onze full audit-dienst.
Veelgestelde vragen
Worden mijn keys ergens opgeslagen?+
Nee. De volledige scan draait in je browser via fetch() naar je eigen Supabase-project. Er gaat geen request naar AIFAIS-servers. Je keys verlaten je apparaat niet en worden niet gelogd. Code is open source op github.com/AIFAIS/aifais-landing.
Wat is het verschil tussen anon-key en service-role-key?+
De anon-key is de publieke key die in je client-side bundle staat (zichtbaar voor iedereen die je site bezoekt). Die mag je hier veilig plakken. De service-role-key bypassed alle RLS en hoort alleen server-side te leven. Plak die NOOIT in deze tool of waar dan ook in je client-code.
Welke tabellen test de scan?+
We proberen 25 common-table-namen (users, profiles, leads, contacts, orders, invoices, companies, messages, audit_log, etc.) plus eventuele namen die we via PGRST205-orakel hints kunnen extraheren. De scan is niet volledig, een echte tabellen-enumeratie vergt meer technieken.
Wat als de scan groen is, ben ik dan veilig?+
Nee, niet noodzakelijk. Deze scan dekt alleen anon-SELECT op common-table-namen. Een volledige audit dekt ook anon-INSERT, PATCH op profiles.role, Realtime publication, Storage policies, Edge Functions, RPC en JWT-config. Zie aifais.com/ai-security voor de volledige checklist.
Werkt dit ook voor Firebase of andere backends?+
Nee, deze scan is specifiek voor Supabase (PostgREST). Firebase heeft eigen Security Rules die anders werken. Voor Firebase-audits, neem contact op via aifais.com/contact.
Hoe vaak moet ik dit draaien?+
Elke keer dat een AI-tool (Lovable, Bolt, Cursor, v0) een nieuwe tabel of migratie genereert. Plus minimaal eens per kwartaal voor productie-apps. De scan duurt 30 seconden, dus inplannen als monthly check is realistisch.
