Supabase daje ci bazę danych i API w kilka minut, i właśnie w tym tkwi niebezpieczeństwo: API jest odsłonięte od pierwszej chwili. Jeśli nie skonfigurujesz zabezpieczeń, każdy z twoim kluczem publicznym może odczytywać i zapisywać twoje tabele. Oto co przejrzeć.
RLS włączony na KAŻDEJ tabeli
Row Level Security to główna bariera Supabase. Bez niej klucz anon może odpytywać całe tabele prosto z przeglądarki. Klasyczny błąd vibe codera to szybkie utworzenie nowej tabeli i zapomnienie o włączeniu RLS.
Sprawdź tabelę po tabeli w panelu: jeśli któraś pojawia się bez RLS, jest otwarta dla publiczności. Samo włączenie też nie wystarczy: tabela z włączonym RLS, ale bez polityk odmawia wszystkiego, a ta ze zbyt liberalną polityką nie chroni niczego.
service_role kontra anon
Klucz anon jest publiczny i idzie do frontendu: jest pomyślany tak, żeby rządził nim RLS. Klucz service_role całkowicie omija RLS i ma pełny dostęp. Nigdy, przenigdy nie może pojawić się w przeglądarce ani w zmiennej NEXT_PUBLIC_.
Używaj go tylko na serwerze, w edge functions albo zaufanych backendach. Jeśli podejrzewasz wyciek, zrotuj go natychmiast z panelu.
Polityki, które naprawdę odzwierciedlają, kto co może
Polityka true dla wszystkich zostawia tabelę otwartą nawet z włączonym RLS. Pisz konkretne polityki: żeby użytkownik czytał i edytował tylko własne wiersze, zwykle porównując auth.uid() z kolumną właściciela. Rozdziel reguły według operacji (select, insert, update, delete): czasem chcesz pozwolić na odczyt, ale nie na usuwanie.
Storage: buckety też mają reguły
Przechowywanie plików korzysta z własnych polityk. Publiczny bucket serwuje dowolny plik po URL każdemu, kto go ma. Zdecyduj świadomie, które buckety są publiczne, a resztę chroń politykami opartymi na użytkowniku. Wgrywaj prywatne dokumenty do prywatnych bucketów, nie do publicznego z trudnymi do odgadnięcia nazwami.
Sekrety i klucze poza frontendem
Poza service_role sprawdź, czy w JavaScripcie klienta nie ma wpieczonych kluczy zewnętrznych (Stripe, poczta, AI). AI czasem wrzuca je tam, żeby coś szybko zadziałało, i zostają widoczne na zawsze.
Scanaris przegląda twoje Supabase za ciebie
Scanaris zawiera opcjonalny audyt Supabase, który sprawdza, czy twoje tabele mają RLS, i wykrywa klucze odsłonięte we frontendzie. To kontrola tylko do odczytu nad tym, co już jest publiczne, a każde znalezisko przychodzi z promptem gotowym do wklejenia w twoją AI. Przepuść go przed startem, a będziesz wiedzieć, czy zostawiłeś otwarte drzwi.