Zum Inhalt springen

Prüfregel · RSC-SEC-028

Datenbank-Tabellen anonym lesbar (nachgewiesen)

SicherheitSchweregrad: HochCWE-284OWASP A01-2021

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

Außen-Scan (anonym)

So behebt ihr es

Row Level Security aktivieren und jede Policy an `auth.uid()` binden; danach erneut prüfen.

Eigene App kostenlos prüfen