Prüfregel · RSC-SEC-035
Browser schreibt direkt in die Datenbank
Findet Schreibaufrufe (`insert`, `update`, `upsert`, `delete`, Storage-Upload) im ausgelieferten Code bzw. in `use client`-Dateien.
Warum das zählt
Das ist das häufigste Muster bei KI-gebauten Apps überhaupt: Die Komponente ruft `supabase.from("tabelle").insert(...)`, der Browser spricht direkt mit der Datenbank. Im eigenen Vibe-Code-Audit war das bei 5 von 12 generierten Features so.
Es ist keine Lücke an sich — Supabase ist dafür gebaut. Es verschiebt aber die gesamte Zugriffskontrolle in die Datenbank: Ab hier entscheidet nur noch Row Level Security, WER schreiben darf, und niemand prüft, WAS geschrieben wird. Kein Schema-Check, kein Rate-Limit, kein Spam-Schutz — ein Kontaktformular ohne Server ist damit auch ein offener Schreibkanal.
Prüfen: Existiert für jede genannte Tabelle eine Policy, die genau diese Operation an `auth.uid()` bindet? Läuft ein Löschvorgang aus dem Browser, gilt das doppelt. Alles, was validiert oder begrenzt werden muss (Formulare, Zahlungen, Einladungen), gehört hinter einen eigenen Endpunkt.
Prüfstufe
So behebt ihr es
Schreibpfade über einen Server-Endpunkt mit Validierung und Rate-Limit führen; RLS-Policy je Tabelle und Operation nutzerbezogen prüfen.