View umgeht Row Level Security
Prüfregel · RSC-SEC-112
- Sicherheit
- Schweregrad: Hoch
- CWE-284
- OWASP A01-2021
Findet Views und Materialized Views im API-Schema ohne `security_invoker = true`, die anon oder authenticated lesen dürfen.
Warum das zählt
Views laufen in Postgres standardmäßig mit den Rechten ihres Besitzers, in Supabase meist `postgres`. Die RLS-Policies der Tabellen darunter gelten dann nicht: Wer die View lesen darf, sieht alle Zeilen, die sie zeigt — auch die anderer Nutzer.
Das fällt kaum auf, weil die Tabellen selbst sauber geschützt sind und jede Prüfung der Policies grün ist. Die View ist ein zweiter, ungeschützter Eingang zu denselben Daten. Der Supabase Security Advisor meldet das als „Security Definer View“, Materialized Views kennen gar kein RLS.
Fix: Views mit `security_invoker = true` anlegen, dann gelten die Policies der Tabellen für den Aufrufer. Materialized Views gehören in ein Schema, das die API nicht ausliefert.
Prüfstufe
- Repo-Zugang (Deep-Scan)
So behebt ihr es
`alter view <view> set (security_invoker = true)` (ab Postgres 15) — oder die View in ein nicht exponiertes Schema verschieben bzw. `revoke select … from anon, authenticated`.