← Alle Checks
SicherheitTypische Schwere: Kritisch

Prüfer für offene Datenbanken

Prüft, ob die Supabase-Tabellen oder die Firebase-Datenbank deiner Website ohne Anmeldung lesbar sind.

Kostenloser Live-Check

Wir finden dein Supabase- oder Firebase-Projekt im öffentlichen Code deiner Website und prüfen mit demselben öffentlichen Schlüssel, den deine Besucher bekommen, ob seine Tabellen ohne Anmeldung lesbar sind. Wir zählen nur Zeilen; wir laden nie Daten herunter.

Kostenlos in deinem Dashboard prüfen

Kostenloses Konto, in 30 Sekunden bereit. Wir zählen nur Zeilen; wir laden nie Daten herunter.

Was es prüft

Dieser Scanner sucht im öffentlichen JavaScript deiner Website die Adresse deines Supabase-Projekts oder deiner Firebase Realtime Database und den öffentlichen Schlüssel, den der Browser nutzt. Mit genau diesem Schlüssel prüft er, wie es jeder Besucher könnte, welche Tabellen ohne Anmeldung antworten. Er zählt nur Zeilen: Er lädt und speichert niemals Daten.

Warum es wichtig ist

In Supabase gehört der öffentliche Schlüssel in den Browser: Was die Daten schützt, sind die Row-Level-Security-Richtlinien. Hat eine Tabelle kein RLS, kann sie jeder mit einer einzigen Anfrage komplett lesen. Genau das war die Lovable-Schwachstelle (CVE-2025-48757) und der häufigste Fehler in KI-gebauten Apps.

Wie man es behebt

Aktiviere Row Level Security für alle Tabellen und schreibe Richtlinien, die jedem Nutzer nur seine eigenen Zeilen zeigen; öffentlichen Lesezugriff nur dort, wo es wirklich öffentlich sein soll. Ersetze in Firebase die Regeln des Testmodus durch Regeln, die eine Anmeldung verlangen. Scanne danach erneut, um zu bestätigen, dass die anonyme Zeilenzahl null ist.

So funktioniert diese Prüfung

Apps, die mit Lovable, Bolt oder v0 gebaut sind, sprechen meist direkt aus dem Browser mit Supabase. Die URL deines Projekts und sein öffentlicher Schlüssel (anon oder sb_publishable_…) stecken also in deinem JavaScript. Das ist normal: Der Schlüssel soll öffentlich sein. Scanaris findet beides, fragt die Supabase-API, welche Tabellen sie freigibt, und sendet pro Tabelle eine HEAD-Anfrage mit Prefer: count=exact. Die Antwort enthält die Zahl der Zeilen, die ein Besucher ohne Sitzung sieht, und keinerlei Daten. Veröffentlicht die API keine Tabellenliste, werden die Namen geprüft, die KI-Tools am häufigsten verwenden (profiles, users, orders, messages…). Bei Firebase wird geprüft, ob die Wurzel der Realtime Database einen Lesezugriff ohne Sitzung beantwortet.

Was ein Befund bedeutet

Eine Tabelle mit mehr als null anonym sichtbaren Zeilen kann jeder lesen, der deine Website öffnet: eine Anfrage mit dem öffentlichen Schlüssel, und er hat die ganze Tabelle. Genau das ist das Muster der Lovable-Schwachstelle (CVE-2025-48757). Mit aktivierter Row Level Security und vernünftigen Richtlinien sieht ein anonymer Besucher null Zeilen, deshalb führt eine „0“ nie zu einem Befund.

So behebst du es in Supabase

Liste die Tabellen ohne RLS auf, aktiviere es und schreibe eine Richtlinie pro Operation. Öffentlichen Lesezugriff nur dort, wo die Daten wirklich öffentlich sind (ein Blog, ein Produktkatalog).

-- Tables in the public schema without RLS
select c.relname
from pg_class c
join pg_namespace n on n.oid = c.relnamespace
where n.nspname = 'public' and c.relkind = 'r' and not c.relrowsecurity;

alter table public.profiles enable row level security;

create policy "profiles: own rows" on public.profiles
  for select to authenticated
  using ((select auth.uid()) = id);

So behebst du es in Firebase

Ersetze die Regeln des Testmodus durch Regeln, die standardmäßig alles verweigern und nur öffnen, was dem jeweiligen Nutzer gehört:

{
  "rules": {
    ".read": false,
    ".write": false,
    "users": {
      "$uid": {
        ".read": "auth != null && auth.uid === $uid",
        ".write": "auth != null && auth.uid === $uid"
      }
    }
  }
}

Die Schritt-für-Schritt-Anleitung findest du im Supabase-Leitfaden und im Firebase-Leitfaden.

Häufige Fragen

Liest Scanaris meine Daten?

Nein. Es liest nur die Zeilenzahl, die die API in einem Header zurückgibt; die Anfragen enthalten keine Tabelleninhalte, und nichts wird gespeichert.

Kann ich stattdessen den öffentlichen Schlüssel verstecken?

Nein, und das ist auch nicht nötig: Der Browser braucht ihn, um mit Supabase zu sprechen. Deine Daten schützt RLS, nicht das Verstecken des Schlüssels.

Prüf es auf deiner Website

Scanne deine Website kostenlos und sieh, ob dieser und 47 weitere Checks bestehen, mit einem Fix-Prompt für jedes Problem.

Meine Website kostenlos scannen

Aus dem Blog

Sicherheit nach Stack

Verwandte Checks