Prüfregel · RSC-SEC-028
Datenbank-Tabellen anonym lesbar (nachgewiesen)
Beantwortet die eigentliche Frage: Kommen mit dem öffentlich ausgelieferten Schlüssel tatsächlich Zeilen heraus? Gezählt wird ausschließlich über den `Content-Range`-Header einer HEAD-Anfrage — es wird keine einzige Zeile abgerufen.
Warum das zählt
Dass eine Tabelle der anon-Rolle zugeteilt ist, heißt noch nicht, dass Daten herauskommen — darüber entscheidet Row Level Security. Diese Regel beantwortet den Unterschied: Sie fragt die Zeilenzahl ab und belegt damit, ob die Tabelle wirklich offen steht.
Der Nachweis ist absichtlich minimal-invasiv: eine HEAD-Anfrage mit `Range: 0-0` und `Prefer: count=exact`. Sie liefert die Anzahl im Antwort-Header und keinen Inhalt. Verwendet wird ausschließlich der Schlüssel, den die App selbst in jedem Browser veröffentlicht — abgerufen wird damit weniger als bei einem normalen Seitenaufruf derselben App.
Kommt hier eine Zahl größer null heraus, ist der Login wirkungslos: Jeder kann diese Daten direkt aus der Datenbank lesen, ohne die App zu benutzen. Fix: RLS für die Tabelle aktivieren, jede Policy an `auth.uid()` binden, danach erneut scannen — der Befund muss verschwinden.
Prüfstufe
So behebt ihr es
Row Level Security aktivieren und jede Policy an `auth.uid()` binden; danach erneut prüfen.