Zum Inhalt springen

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`.

Eigene App kostenlos prüfen