Browser schreibt direkt in die Datenbank
Prüfregel · RSC-SEC-035
- Sicherheit
- Schweregrad: Mittel
- CWE-602
- OWASP A04-2021
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
- Außen-Scan (anonym)
- Quellcode aus Source Maps
- Repo-Zugang (Deep-Scan)
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.