.html Datei.
Ist Ihre Supabase-Datenbank öffentlich zugänglich? Finden Sie es in 30 Sekunden heraus.
psql-Batches, pg_dump/restore oder KI-Coding-Tools (Lovable, Bolt, v0, Cursor, Replit Agent) erstellt werden, starten ohne RLS. Der anon-Rolle ist per Default SELECT auf das public-Schema erteilt – der im Frontend eingebettete API-Key erlaubt dann uneingeschränkten Lesezugriff auf alle Tabelleninhalte. Die Dashboard-only-Voreinstellung ist seit 2022 dokumentiert (Issue #4991).CREATE TABLE-Statements abfängt (PR #45008) – der Standard-Klickpfad erzeugt weiterhin Tabellen ohne RLS, erst das explizite "Run and enable RLS" schützt./rest/v1/ wurde auf Cloud plattformweit geschlossen (401 für alle Key-Formate). Das erschwert das Aufzählen von Tabellen – blockiert aber nicht den Zugriff auf die Daten pro bekannter Tabelle.CREATE TABLE ohne RLS) bleibt unverändert.pg_dump/restore-Pipelines oder KI-Builder-Scaffolds – genau die Pfade, über die das Muster in der Praxis am häufigsten entsteht.eyJ... und ist ein JWT-Token. Der neue Key (publishable) beginnt mit sb_publishable_... und ist ein kurzer opaker String. Beide sind für den Einsatz im Frontend gedacht, beide schützen Ihre Daten nicht ohne RLS. Supabase schreibt selbst: "These keys do not protect against code analysis, browser inspection, or CSRF attacks." Bis Ende 2026 werden die alten JWT-Keys (laut Supabase) abgeschaltet./graphql/v1), Fallback 2: manuelle Eingabe.GET /rest/v1/<tabelle>?limit=10), ob sie mit Ihrem öffentlichen Anon-Key lesbar ist./rest/v1/ plattformweit geschlossen – für alle Key-Formate, auch den Legacy-Key eyJ.... Das Tool fällt daher auf GraphQL-Introspection oder manuelle Eingabe von Tabellennamen zurück. Liefern beide Pfade nichts, bleibt das Tool erkenntnislos – das heißt nicht, dass Ihre Instanz sicher ist.supabase.co), API-Keys die erst nach Login geladen werden, stark obfuskierter JavaScript-Code, fehlkonfigurierte RLS-Policies à la USING (true), SECURITY DEFINER-Funktionen mit public-Grants, postgres_changes-Leaks über Realtime, Edge-Function-Leaks, service_role-Keys die fälschlich im Frontend eingebettet sind.Ziehen Sie den blauen Button unten in Ihre Lesezeichenleiste. Öffnen Sie dann Ihre Webseite und klicken Sie auf das Lesezeichen. Die Werte werden Ihnen in Dialogfeldern zum Kopieren angezeigt.
🔍 Supabase Check ← In Lesezeichenleiste ziehen
Öffnen Sie Ihre Webseite → F12 → Console → Code einfügen → Enter:
(async()=>{const R=/https:\/\/([a-z0-9]+)\.supabase\.co/,K=/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\.[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+|sb_publishable_[a-zA-Z0-9_-]+/g,f=new Set,r=new Set,log=(u,k)=>{if(u)r.add(u[1]);if(k)[...new Set(k)].forEach(x=>f.add(x))};const h=document.documentElement.innerHTML;log(h.match(R),h.match(K));for(const s of document.querySelectorAll('script[src]')){try{const t=await fetch(s.src).then(r=>r.text());log(t.match(R),t.match(K))}catch{}}if(f.size||r.size){const ref=[...r][0]||'-';const key=[...f][0]||'-';console.log('%c Supabase gefunden! ','background:#22c55e;color:white;padding:4px 8px;border-radius:4px','\n Project Ref: '+ref+'\n Anon Key: '+key);prompt('Project Ref:',ref);prompt('Anon Key:',key)}else{console.log('%c Kein Supabase ','background:#ef4444;color:white;padding:4px 8px;border-radius:4px')}})()
Im Supabase Dashboard: Settings → General → Reference ID und Settings → API → anon public Key (Legacy: beginnt mit eyJ...) oder Publishable Key (Neu: beginnt mit sb_publishable_...).
Scan läuft...
docker compose stop rest) oder den Port in der Firewall blocken, bis Sie Phase 4 abgeschlossen haben.GET /rest/v1/<tabelle>-Anfragen mit steigendem ?offset= oder Range:-Header. Ungewöhnlich hohes Response-Volumen (Bytes pro Minute) ist ein zweites Signal.docker logs postgrest und pg_stat_statements; zusätzlich Kong-Logs bei vollständigem Supabase-Stack.support@supabase.com.ALTER TABLE public.ihre_tabelle ENABLE ROW LEVEL SECURITY; -- Default-Deny: ohne Policies gibt die Tabelle keine Zeilen zurück. -- Minimalbeispiel – nur authentifizierte Nutzer lesen ihre eigenen Zeilen: CREATE POLICY "own_rows_select" ON public.ihre_tabelle FOR SELECT TO authenticated USING (user_id = auth.uid()); CREATE POLICY "own_rows_insert" ON public.ihre_tabelle FOR INSERT TO authenticated WITH CHECK (user_id = auth.uid());Zusätzlich prüfen:
USING (true) – lässt jede Zeile durch, sobald ein beliebiger Nutzer angemeldet ist. In der Praxis ebenso kritisch wie fehlendes RLS.security_invoker = true umgehen sie RLS. Auf Postgres 15+ explizit ALTER VIEW <view> SET (security_invoker = true); setzen.service_role-Key nutzen, dürfen keine ungeprüften Anon-Eingaben in Queries einsetzen.postgres_changes: RLS-off-Tabellen leaken jede Änderung live an anonyme Subscriber. Tabelle entweder aus der supabase_realtime-Publication entfernen oder RLS aktivieren.0013_rls_disabled_in_public.SELECT c.relname, c.relrowsecurity FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = 'public' AND c.relkind = 'r'; -- relrowsecurity muss für jede Tabelle true sein.Weiterführend: Row Level Security Guide · Securing Your Data · Splinter-Linter.
Nein. Der Supabase "anon Key" ist von Supabase dafür vorgesehen, im Frontend eingebettet zu werden. Er ist öffentlich sichtbar im Quellcode - das kann jeder mit F12 → Sources sehen. Das Problem ist nicht der Key, sondern fehlende Row Level Security auf den Tabellen.
Nein. Alles läuft in Ihrem Browser. Kein Server ist beteiligt. Ihr Project Ref, Ihr Key und die Scan-Ergebnisse verlassen nie Ihren Computer. Sie können den Netzwerk-Tab in den Entwicklertools überprüfen - die einzigen Requests gehen direkt an Ihre eigene Supabase-Instanz.
Nein. Wenn Sie Row Level Security (RLS) auf allen Tabellen aktiviert haben, sind Sie geschützt. Dieser Check prüft genau das.
Behandeln Sie den Report vertraulich. Aktivieren Sie sofort RLS auf den betroffenen Tabellen. Als Verantwortlicher im Sinne der DSGVO sind Sie verpflichtet, die zuständige Aufsichtsbehörde innerhalb von 72 Stunden zu informieren (Art. 33 DSGVO). Supabase ist Auftragsverarbeiter - die Meldepflicht liegt bei Ihnen, nicht bei Supabase. Löschen Sie den Report nach Behebung der Schwachstelle.
Möglicherweise ja. Auch wenn Ihre Tabellen aktuell leer sind, ist das Datenbankschema (Tabellennamen, Spaltennamen, Datentypen) öffentlich einsehbar. Das ist ein Sicherheitsrisiko weil:
• Angreifer sehen wie Ihre Daten strukturiert sind (z.B. password_history, user_tokens, iban)
• Das erleichtert gezielte SQL-Injection-Angriffe wenn andere Schwachstellen existieren
• Sobald Daten in die Tabellen geschrieben werden, sind sie sofort öffentlich lesbar
• OWASP klassifiziert das als "Security Misconfiguration" (A05:2021)
Empfehlung: Aktivieren Sie RLS auch auf leeren Tabellen – bevor die ersten Daten eingegeben werden.
Sehr. Laut Sicherheitsforschern sind 11% aller Indie-Apps betroffen. CVE-2025-48757 dokumentierte 170+ betroffene Lovable-Apps. In meiner eigenen Untersuchung von ca. 600 deutschsprachigen Webseiten waren über 350 zugreifbar.