Prüfregel · RSC-SEC-067
RLS-Policy erlaubt beliebiges Schreiben
Findet `with check (true)` — die Lesebedingung kann streng sein, geschrieben werden darf trotzdem alles.
Warum das zählt
Eine Policy hat zwei Bedingungen: `using` regelt, welche Zeilen gelesen und geändert werden dürfen, `with check` regelt, welche Werte geschrieben werden dürfen. Wer nur die erste absichert, hat eine Tabelle, die sauber abgeschottet aussieht und trotzdem von jedem befüllt werden kann.
Praktisch heißt das: Datensätze mit fremder Nutzer-ID anlegen, eigene Zeilen auf fremde Besitzer umschreiben, oder eine Tabelle mit Müll fluten, der wie legitimer Inhalt aussieht. Weil das Lesen korrekt eingeschränkt bleibt, fällt es im Betrieb oft lange nicht auf.
Fix: `with check` immer mitschreiben und mit derselben Bedingung versehen wie `using`. Bei INSERT-Policies ist `with check` die einzige Bedingung, die überhaupt greift — dort ist `true` gleichbedeutend mit „offen für alle“.
Prüfstufe
So behebt ihr es
Der Schreibbedingung denselben Eigentümer-Bezug geben: `with check (auth.uid() = user_id)`.