Prüfregel · RSC-SEC-010
Supabase service_role-Schlüssel im Client
Dekodiert JWTs im Bundle und meldet den Rollen-Claim `service_role`, der RLS vollständig umgeht.
Warum das zählt
Supabase gibt euch zwei Schlüssel. Der anon-Key darf ins Frontend — er sieht nur, was eure Row-Level-Security-Regeln erlauben. Der service_role-Key ist der Generalschlüssel: Er umgeht jede RLS-Regel und darf jede Zeile lesen, ändern und löschen. Er gehört ausschließlich auf den Server.
Der typische Weg ins Leck: Ein Generator oder ein Tutorial legt den Schlüssel in eine Variable mit dem Präfix NEXT_PUBLIC_ (Next.js) oder VITE_ (Vite). Beide werden fest in das Bundle kompiliert, das jeder Besucher herunterlädt. Wer die Developer-Tools öffnet, hat den Generalschlüssel — und damit die komplette Datenbank, egal wie sicher der Login aussieht.
So prüft ihr es selbst: Öffnet eure Seite, sucht im ausgelieferten JavaScript nach „service_role“. Findet ihr etwas, ist der Schlüssel öffentlich. Dann hilft kein Verstecken — er muss in der Supabase-Konsole rotiert und danach ausschließlich serverseitig verwendet werden (API-Route, Server Action, Edge Function).
Prüfstufe
So behebt ihr es
Schlüssel sofort rotieren, ausschließlich serverseitig verwenden, Zugriffe prüfen.