Supabase RLS za početnike: da baza ne bude javna
Zaštita na nivou reda u Supabase bazi, objašnjeno bez žargona: dva sita kroz koja prolazi svaki upit, najčešće greške i kako da danas proverite svoju bazu.
Izaberi iznos ili skeniraj kod bez iznosa pa ga upiši u banci. Novac ide direktno na račun autora (GoSimple), Trek ne uzima ništa i nije posrednik u plaćanju.
Na telefonu: preuzmi kod, pa ga u aplikaciji banke učitaj iz galerije.
Ažurirano: 12.10.2026. | Verzija 1.0
Kad aplikaciju pravi AI alat, baza se najčešće otvori prema internetu, a pravilo o tome ko sme da vidi koji red ostane isključeno. Rezultat je tabela koju svako sa adresom vaše aplikacije može da pročita, a ponekad i da izmeni.
Koliko je to često: u pregledu objavljenom 1. oktobra 2026. skenirano je oko 300.000 domena koji koriste Supabase, i pronađeno je 16.326 baza sa tabelama koje se čitaju spolja. Više od polovine imalo je naznake ličnih podataka. Nije u pitanju propust u Supabase-u, nego podešavanje pojedinačnih aplikacija.
Ovaj tekst objašnjava šta je zaštita na nivou reda, zašto baš aplikacije napravljene uz AI upadaju u ovu rupu, i kako da u narednih petnaest minuta proverite svoju.
Zašto baš AI aplikacije
Postoji detalj koji objašnjava skoro sve. Tabela koju napravite kroz vizuelni uređivač u Supabase-u dobija zaštitu podrazumevano. Tabela koju neko napravi programski, preko SQL-a ili API-ja, ne dobija je.
Agent uvek pravi tabele programski.
Dva sita, ne jedno
Većina objašnjenja preskoči ovo, pa ljudi misle da su zaštićeni jer su napisali politiku. Svaki upit prolazi kroz dve provere.
Zvanična dokumentacija to kaže kratko: tabela u izloženoj šemi bez zaštite na nivou reda može da se čita i menja od svake uloge koja ima dozvolu. Zato je pravilo da se zaštita uključuje na svakoj tabeli u izloženoj šemi, a na starijim projektima dodatno povuku i dozvole, jer politike same po sebi ne ukidaju dozvole.
Javni i tajni ključ, razlika koja odlučuje
Supabase je u međuvremenu promenio imena ključeva, pa ćete naići na oba naziva.
| Ključ | Novo ime | Gde sme | Šta radi |
|---|---|---|---|
| Javni | sb_publishable_… (ranije anon) | U pregledaču, aplikaciji, svuda | Radi pod pravilima koja ste napisali |
| Tajni | sb_secret_… (ranije service_role) | Isključivo na serveru | Zaobilazi sva pravila pristupa |
Dokumentacija je ovde nedvosmislena: tajni ključ se nikad ne stavlja u pregledač, u isporučenu aplikaciju ni u sistem za verzije. U primeru fajla sa promenljivama stoji i upozorenje da se takvoj promenljivoj ne sme dodati javni prefiks, jer će je alat za pakovanje ugraditi u kod koji ide korisniku.
Jedna nijansa koju vredi znati: tajni ključ zaobilazi pravila samo kada zahtev ne nosi korisnički token. Ako ga nosi, primenjuju se politike tog korisnika.
Supabase je najavio da ukida stare nazive ključeva do kraja 2026, a pravljenje novih ne gasi stare, pa se stari moraju ručno isključiti.
Pet grešaka na koje dokumentacija izričito upozorava
- Pogled (view) zaobilazi zaštitu. Pogledi se podrazumevano izvršavaju sa pravima vlasnika, pa prikažu više nego što bi smeli. Rešava se podešavanjem da se izvršavaju u ime pozivaoca.
- Funkcija sa pravima tvorca. Takva funkcija radi sa privilegijama onoga ko ju je napravio. Ne pravi se u izloženoj šemi, a putanja pretrage mora biti prazna.
- Provera korisnika koja tiho propada. Kad zahtev nije prijavljen, identifikator korisnika je prazan, pa poređenje tiho ne vrati ništa umesto da odbije pristup. Treba izričito proveriti da identifikator nije prazan.
- Politika koja važi za sve. Uslov koji je uvek tačan čini redove javnim. To ima smisla samo za stvarno javne podatke.
- Autorizacija na osnovu podataka koje korisnik sam menja. Deo profila korisnika je takav da ga korisnik može izmeniti, pa se po njemu ne sme odlučivati o pravima.
Dodatno: politike se pišu posebno za čitanje, upis, izmenu i brisanje, a ne jednom za sve operacije. Izmena traži i odgovarajuću politiku za čitanje.
Kako da proverite svoju bazu danas
Ovo traje petnaest minuta i ne zahteva programiranje.
- Otvorite savetnika za bezbednost u Supabase okruženju. On prijavljuje tačno ova stanja, sa imenima pravila. Najvažnija su ono koje prijavljuje tabelu bez zaštite, ono koje prijavljuje politiku uz isključenu zaštitu, i ono koje prijavljuje pogled sa pravima vlasnika.
- Pogledajte izvorni kod svoje strane u pregledaču i potražite ključeve. Javni ključ tu sme da bude, tajni ne.
- Otvorite aplikaciju u anonimnom prozoru i pokušajte da dođete do podataka drugog korisnika.
- Tražite od AI alata spisak, ne izmenu: „Izlistaj sve tabele, da li je na svakoj uključena zaštita na nivou reda i koje politike postoje. Ništa nemoj da menjaš."
- Tek onda tražite ispravku, tabelu po tabelu.
Ako koristite savetnika preko komandne linije ili MCP veze, ista provera postoji i tamo.
Kako se piše zahtev AI alatu
Nemojte tražiti „neka bude bezbedno". U akademskom testu, opšti bezbednosni nagoveštaj nije poboljšao rezultat. Radi konkretan spisak.
Za tabelu porudzbine uključi zaštitu na nivou reda i napiši četiri
odvojene politike: čitanje, upis, izmena, brisanje. Pravilo je da
korisnik vidi i menja samo svoje redove, a da neprijavljen korisnik
ne vidi ništa. Posebno proveri slučaj kada zahtev nije prijavljen.
Kad završiš, izlistaj mi politike koje si napravio.
Česta pitanja
Da li je Supabase nebezbedan? Nije. Zaštita postoji i radi, ali mora da se uključi. Problem nastaje kad tabele pravi alat koji to ne uradi, a niko ne proveri.
Imam aplikaciju u izradi, da li je kasno? Nije, ali ne odlažite do objave. Uključivanje zaštite posle, kad već postoje podaci i kod koji ih čita, znači da ćete morati da proverite svaki ekran.
Da li zaštita usporava aplikaciju? Politika radi kao dodatni uslov u upitu. Na malim bazama se ne primećuje. Na velikim se piše pažljivo, uz odgovarajuće indekse.
Šta ako koristim Firebase ili neku drugu bazu? Princip je isti, samo se drugačije zove. Svaka baza koja se poziva iz pregledača mora da ima pravila na svojoj strani, jer sve što je u pregledaču korisnik može da promeni.
Kako da znam da sam zaista zaštićen? Jedini pouzdan način je proba: otvorite anonimni prozor i pokušajte da dođete do tuđih podataka. Ako ne uspete, zaštita radi.
Sledeći korak
Pustite savetnika za bezbednost na svom projektu pre nego što zatvorite ovu stranu. Ako nađete prijave, pročitajte i spisak ostalih propusta koje AI ostavlja.
GoSimple · Ivan Dabetić
Izvori (provereno 12.10.2026)
- Supabase, zaštita na nivou reda: https://supabase.com/docs/guides/database/postgres/row-level-security
- Supabase, savetnik za bazu i spisak pravila: https://supabase.com/docs/guides/database/database-advisors
- Supabase, ključevi i njihova namena: https://supabase.com/docs/guides/api/api-keys
- Pregled izloženih baza, oktobar 2026: https://www.upguard.com/blog/everything-everywhere-systemic-data-exposure-in-supabase-apps
- SusVibes, bezbednosni nagoveštaj ne pomaže: https://arxiv.org/abs/2512.03262