Befund erklärt
Supabase-Tabelle ohne Row Level Security
Dieser Befund heißt: Wir haben deine Tabelle mit dem öffentlichen anon-Schlüssel aus deinem eigenen Frontend abgefragt — ohne angemeldet zu sein — und Datensätze zurückbekommen. Das kann jeder, der deine Seite öffnet. Wenn in der Tabelle Personendaten stehen, ist das nicht nur ein technischer Mangel, sondern nach Art. 33 DSGVO in der Regel ein meldepflichtiger Vorfall mit einer Frist von 72 Stunden. Behoben ist es mit zwei SQL-Anweisungen; der Aufwand liegt bei Minuten, nicht Stunden.
Der Scan ist kostenlos und dauert etwa zwanzig Sekunden. Du siehst sofort, wie viele Befunde es gibt und wie schwer sie wiegen.
Eigene App kostenlos scannenWas genau passiert ist
Supabase liefert Tabellen über eine REST-Schnittstelle aus. Welche Zeilen jemand sehen darf, entscheidet Row Level Security — Regeln, die in der Datenbank liegen und bei jeder Anfrage ausgewertet werden.
Ist Row Level Security für eine Tabelle nicht aktiviert, entfällt diese Prüfung. Die Anfrage wird beantwortet, weil der anon-Schlüssel gültig ist. Dass der Fragende niemand Bestimmtes ist, spielt dann keine Rolle.
Der anon-Schlüssel steht öffentlich in deinem Frontend, weil er dort hingehört. Erst das Fehlen der Regeln macht ihn zum Generalschlüssel.
Sofort beheben
In der Supabase-Konsole unter Authentication → Policies. Beide Anweisungen gehören zusammen: Die erste sperrt, die zweite öffnet gezielt.
Warnung: Nach `ENABLE ROW LEVEL SECURITY` und vor der ersten Policy sieht auch deine eigene App keine Daten mehr. Setze beides in einem Durchgang.
ALTER TABLE <tabelle> ENABLE ROW LEVEL SECURITY; CREATE POLICY "Eigene Zeilen lesen" ON <tabelle> FOR SELECT USING (auth.uid() = user_id); CREATE POLICY "Eigene Zeilen ändern" ON <tabelle> FOR UPDATE USING (auth.uid() = user_id) WITH CHECK (auth.uid() = user_id);
Für jede Tabelle, nicht nur für diese
Row Level Security gilt je Tabelle. Wir melden die Tabellen, die wir gefunden haben — gefunden werden können nur die, deren Namen im Frontend auftauchen.
Sieh deshalb in der Supabase-Konsole nach: Unter Table Editor zeigt eine Spalte an, für welche Tabellen RLS aktiv ist. Alles, worin Personendaten stehen, gehört abgesichert, auch wenn deine App die Tabelle gerade nicht abfragt.
Ist das ein meldepflichtiges Datenleck?
Wenn Personendaten betroffen sind und sie tatsächlich öffentlich abrufbar waren: nach Art. 33 DSGVO in der Regel ja, mit 72 Stunden Frist gegenüber der zuständigen Aufsichtsbehörde. Eine Meldung ist entbehrlich, wenn ein Risiko für die Betroffenen unwahrscheinlich ist — diese Einschätzung ist eine juristische, keine technische.
Kommt ein hohes Risiko hinzu, müssen nach Art. 34 zusätzlich die Betroffenen selbst benachrichtigt werden.
Das ist keine Rechtsberatung. Im Zweifel gehört der Fall anwaltlich geprüft — und zwar innerhalb der Frist, nicht danach.
Nachweisen, dass es weg ist
Wiederhole die Abfrage im abgemeldeten Zustand. Kommt jetzt eine leere Liste oder ein Fehler, greifen die Regeln.
Danach die App im angemeldeten Zustand durchklicken: Zu strenge Regeln fallen sonst erst dem ersten Kunden auf.
Wer den Report freigeschaltet hat, kann dieselbe Domain 90 Tage lang beliebig oft nachtesten. Der zweite Scan ist der Beleg — für dich und, falls es dazu kommt, für die Dokumentation des Vorfalls.
Das prüfen wir automatisch
- Row Level Security je Tabelle (Deep-Scan)
- Antwortende REST-Endpunkte ohne Anmeldung
- service_role-Schlüssel im Frontend
Häufige Fragen
- Wie konnte jemand ohne Anmeldung an meine Daten kommen?
- Über den anon-Schlüssel, der öffentlich in deinem Frontend steht — das ist so vorgesehen. Was fehlt, sind die Regeln in der Datenbank, die entscheiden, welche Zeilen jemand sehen darf. Ohne sie beantwortet Supabase jede Anfrage, die einen gültigen Schlüssel mitbringt.
- Muss ich meinen anon-Schlüssel jetzt austauschen?
- Nein. Der anon-Schlüssel ist nicht das Problem und ist nicht geheim. Die Lücke sind die fehlenden Regeln. Ein neuer Schlüssel würde nichts ändern, weil auch er öffentlich im Frontend stehen müsste.
- Wie lange war meine Tabelle offen?
- Das lässt sich von außen nicht feststellen. Anhaltspunkte geben die Protokolle in der Supabase-Konsole und der Zeitpunkt, zu dem die Tabelle angelegt wurde. Für eine Vorfallsdokumentation ist das die entscheidende Frage — sieh dort zuerst nach.
- Kann ich prüfen lassen, ob es jetzt behoben ist?
- Ja. Scanne dieselbe Adresse erneut. Nach einer Freischaltung ist das 90 Tage lang beliebig oft ohne weitere Kosten möglich, und jeder neue Bericht ist sofort vollständig sichtbar.