[{"data":1,"prerenderedAt":375},["ShallowReactive",2],{"blog-it-can-anyone-read-your-supabase-database":3},{"id":4,"title":5,"body":6,"category":336,"cover":337,"coverAlt":337,"description":338,"draft":339,"extension":340,"faq":341,"image":357,"keywords":358,"meta":364,"navigation":365,"ogTitle":30,"path":366,"published":367,"seo":368,"stem":369,"tldr":370,"updated":367,"__hash__":374},"blog_it\u002Fblog\u002Fcan-anyone-read-your-supabase-database.md","Chiunque può leggere il tuo database Supabase? 3.680 app testate",{"type":7,"value":8,"toc":324},"minimark",[9,13,20,23,26,31,34,43,46,49,53,56,116,122,125,131,137,148,152,155,160,184,191,199,203,206,209,217,221,224,231,235,238,244,250,259,263,297,300,305,312],[10,11,12],"p",{},"La tua app ha una schermata di login. Dietro ci sono i tuoi utenti, i loro\nmessaggi, forse i loro ordini. Sembra roba privata, e non esiste un modo ovvio\nper scoprire se lo è davvero, perché la console di Supabase non è un posto in\ncui tu abbia mai avuto bisogno di entrare.",[10,14,15,16],{},"Così siamo andati a misurarlo sulle app degli altri. Ad agosto 2026 abbiamo\nscansionato 30.998 app online pubblicate da Lovable, Base44, Replit, v0 e Bolt,\nfacendo a ciascuna una sola domanda: ",[17,18,19],"strong",{},"chiunque può leggere il tuo database\nSupabase senza fare login?",[10,21,22],{},"Per 2.096 delle 3.680 app da cui abbiamo ottenuto una risposta netta, sì.",[10,24,25],{},"Ed ecco la parte che sbagliano sia la versione allarmante di questa storia sia\nquella rassicurante. Una tabella aperta non è automaticamente una fuga di dati:\nmoltissime tabelle sono fatte per essere lette da tutti. Quale tabella sia\ndecide tutto, e a quella domanda può rispondere solo chi ha costruito l'app.\nEd è anche il motivo per cui nessuno se ne accorge: l'app funziona benissimo in\nentrambi i casi.",[27,28,30],"h2",{"id":29},"chiunque-può-leggere-il-tuo-database-supabase","Chiunque può leggere il tuo database Supabase?",[10,32,33],{},"Per più della metà delle app che abbiamo potuto controllare, sì: almeno una\ntabella ha restituito righe a una richiesta che non portava alcun login.",[10,35,36,37,42],{},"Che questo sia possibile non c'entra nulla con qualcosa di rotto. La tua app\nparla con Supabase dal browser di chi la visita, quindi porta con sé una chiave\nche ogni visitatore può leggere, e quella chiave\n",[38,39,41],"a",{"href":40},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","è fatta per essere pubblica",".\nNomina il tuo progetto. Da sola non concede niente.",[10,44,45],{},"A decidere se uno sconosciuto ottiene i tuoi dati è Row Level Security: una\nregola su ogni tabella che dice chi può leggere quali righe. Senza regola, la\nchiave è l'unica cosa fra internet e quella tabella, e la chiave è scritta nella\ntua pagina.",[10,47,48],{},"È questo che stavamo misurando. Non se una chiave fosse visibile (lo è sempre),\nma cosa fa il database quando qualcuno la usa.",[27,50,52],{"id":51},"di-cosa-è-una-quota-quel-57","Di cosa è una quota quel 57%",[10,54,55],{},"Di una base che abbiamo ristretto tre volte, e il restringimento conta più del\ntitolo.",[57,58,59,72],"table",{},[60,61,62],"thead",{},[63,64,65,69],"tr",{},[66,67,68],"th",{},"Cosa abbiamo contato",[66,70,71],{},"App",[73,74,75,84,92,100,108],"tbody",{},[63,76,77,81],{},[78,79,80],"td",{},"App online scansionate e classificate",[78,82,83],{},"30.998",[63,85,86,89],{},[78,87,88],{},"Nominano un progetto Supabase nella pagina",[78,90,91],{},"8.435",[63,93,94,97],{},[78,95,96],{},"Tabella confermata e risposta ottenuta",[78,98,99],{},"3.680",[63,101,102,105],{},[78,103,104],{},"Almeno una tabella leggibile senza login",[78,106,107],{},"2.096",[63,109,110,113],{},[78,111,112],{},"…e una di quelle aveva un nome da persone",[78,114,115],{},"394",[117,118],"diagram",{"alt":119,"caption":120,"src":121},"Quattro barre misurate sullo stesso totale, ognuna più stretta della precedente: 30.998 app scansionate, 8.435 che usano Supabase, 3.680 in cui il controllo è arrivato in fondo, 2.096 con una tabella leggibile da chiunque. La colonna a destra segna 27%, 44% e 57%, la quota che ogni passaggio conserva di quello sopra.","Ogni barra è misurata sullo stesso totale. Il 57% è una quota delle 3.680 app che abbiamo davvero potuto controllare, non di tutte quelle scansionate.","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fwhat-we-measured-1600x700.png",[10,123,124],{},"Tre cose che non abbiamo fatto. Ognuna sposta la cifra reale da una parte o\ndall'altra, e va detta invece che sepolta.",[10,126,127,130],{},[17,128,129],{},"Abbiamo chiesto solo nomi di tabella che potevamo vedere o indovinare.","\nSupabase non lascia più che una chiave pubblicabile elenchi le tabelle di un\nprogetto, quindi abbiamo letto i nomi che un'app cita nel proprio codice e\naggiunto un paio di dozzine di nomi comuni, con un tetto di trenta per app.\nUn'app le cui tabelle si chiamano in un modo che non ci è venuto in mente ci\nsembra pulita e potrebbe non esserlo.",[10,132,133,136],{},[17,134,135],{},"Abbiamo contato le righe, mai lette."," Ogni sonda ha chiesto al database\nquante righe avrebbe consegnato e si è fermata lì. Non è stato scaricato il dato\ndi nessuno, e nessuna app è nominata in questo articolo né in nient'altro che\npubblichiamo.",[10,138,139,142,143,147],{},[17,140,141],{},"Quasi tutte le app che abbiamo potuto controllare erano app Lovable."," Sono la\nfetta più grande di quello che abbiamo scansionato e le più propense a nominare\nil proprio progetto Supabase nella pagina, quindi leggi questo come una misura\ndelle ",[38,144,146],{"href":145},"\u002Fis-your-lovable-app-safe","app Lovable con Supabase"," e non di ogni\nbuilder. Dove il controllo non è arrivato in fondo, abbiamo registrato che non è\narrivato in fondo. Un'app che non siamo riusciti a controllare è sconosciuta,\nnon pulita.",[27,149,151],{"id":150},"una-tabella-aperta-non-è-automaticamente-un-buco","Una tabella aperta non è automaticamente un buco",[10,153,154],{},"Da fuori, una tabella che chiunque può leggere ha esattamente lo stesso aspetto\nsia che contenga il tuo catalogo prodotti sia che contenga i tuoi clienti. La\nrisposta è la stessa. L'unica cosa che cambia è il nome.",[117,156],{"alt":157,"caption":158,"src":159},"Due percorsi di richiesta identici disegnati uno sopra l'altro. Entrambi inviano un nome di tabella, entrambi ricevono una risposta 200, entrambi ottengono cinque righe. Il percorso in alto è etichettato products e finisce con un segno di spunta verde; quello in basso è etichettato profiles e finisce con una croce rossa.","Stessa richiesta, stessa risposta, verdetti opposti. Solo chi ha costruito l'app sa quale dei due casi sia la propria tabella aperta.","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fsame-answer-different-table-1600x600.png",[10,161,162,163,167,168,167,171,167,174,167,177,167,180,183],{},"Per questo dividiamo il risultato in due. In 394 di quelle app, una delle tabelle\nleggibili portava un nome preso da un breve elenco che per noi significa\npersone: ",[164,165,166],"code",{},"users",", ",[164,169,170],{},"profiles",[164,172,173],{},"customers",[164,175,176],{},"orders",[164,178,179],{},"messages",[164,181,182],{},"invoices",".\nQuello è uno sconosciuto che legge i tuoi clienti, e va sistemato oggi.",[10,185,186,187,190],{},"Le altre 1.702 non possiamo giudicarle da fuori, e non può farlo nessun altro\nscanner. Una tabella ",[164,188,189],{},"posts"," può essere un blog pubblico oppure appunti privati.\nTu sai quale delle due. Chi guarda la tua app da internet non lo sa.",[10,192,193,194,198],{},"Se preferisci non tirare a indovinare sulla tua, la nostra scansione gratuita\ncontrolla il tuo sito online da fuori e ti dice quali tabelle hanno risposto.\nRichiede una ventina di secondi e non serve un account:\n",[38,195,197],{"href":196},"\u002F#scan","scansiona la tua app",".",[27,200,202],{"id":201},"perché-capita-ad-app-che-nessuno-ha-aperto-di-proposito","Perché capita ad app che nessuno ha aperto di proposito",[10,204,205],{},"Perché la correzione che rimette in funzione un'app rotta è di solito quella che\napre la tabella.",[10,207,208],{},"La sequenza è questa. Row Level Security viene attivato, da te o dal builder. La\ntua app smette immediatamente di mostrare dati, perché attivo senza regole\nsignifica che il database rifiuta tutti, te compreso. Incolli l'errore al tuo\nassistente, lui scrive una policy che consente qualunque richiesta, e l'app\ntorna a funzionare. Dopo, niente sembra più sbagliato.",[10,210,211,212,216],{},"Quella policy è proprio ciò che troviamo. La dashboard segnala la tabella come\nprotetta, perché l'interruttore è attivo e una policy esiste. L'articolo su\n",[38,213,215],{"href":214},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","perché Row Level Security attivo non è la stessa cosa di protetto","\npercorre i quattro stati possibili di una tabella e come riconoscere il tuo.",[27,218,220],{"id":219},"la-fuga-di-cui-ti-hanno-messo-in-guardia-era-quella-rara","La fuga di cui ti hanno messo in guardia era quella rara",[10,222,223],{},"Su tutte le 30.998 app, una chiave segreta Supabase lasciata nel browser (la\nchiave che ignora ogni regola tu abbia scritto) è comparsa 3 volte.",[10,225,226,227,230],{},"È la fuga di cui chi ha un'app sente parlare in continuazione e quella che\nabbiamo trovato meno spesso. È seria quando capita, e\n",[38,228,229],{"href":40},"vale la pena saperla riconoscere",",\nma la preoccupazione spesa lì sorveglia una porta quasi sempre chiusa.\nL'apertura comune in queste app è una tabella qualsiasi senza nessuna regola.",[27,232,234],{"id":233},"come-controllare-la-tua-app","Come controllare la tua app",[10,236,237],{},"Due posti in cui guardare dentro il tuo database Supabase, e un modo per vederlo\nda dove sta uno sconosciuto.",[10,239,240,243],{},[17,241,242],{},"Apri il Security Advisor nella dashboard di Supabase."," Elenca ogni tabella\ncon Row Level Security disattivato, che è la versione più netta di questo\nproblema. Supabase lo segnala bene, e se il tuo progetto è in quell'elenco hai\nla risposta senza leggere una riga di SQL.",[10,245,246,249],{},[17,247,248],{},"Poi leggi le policy di ogni tabella che contiene persone."," Il Security\nAdvisor non può decidere se una policy permissiva sia voluta, perché per un\ncatalogo prodotti sarebbe corretta. Apri la tabella, guarda la policy e vedi se\nnomina una condizione o se consente a tutti.",[10,251,252,255,256,258],{},[17,253,254],{},"Oppure controllalo da fuori, che è dove vive il rischio."," Uno sconosciuto non\napre la tua dashboard. La nostra scansione gratuita fa la stessa richiesta\nanonima che farebbe un estraneo e riferisce quali tabelle hanno risposto:\n",[38,257,197],{"href":196},", senza account e senza installare nulla.",[27,260,262],{"id":261},"cosa-fare-con-una-tabella-che-non-dovrebbe-essere-leggibile","Cosa fare con una tabella che non dovrebbe essere leggibile",[264,265,266],"key-takeaways",{},[267,268,269,285,288,291,294],"ul",{},[270,271,272,273,167,275,167,277,167,279,281,282,284],"li",{},"Parti dalle tabelle che contengono persone. In ",[164,274,166],{},[164,276,170],{},[164,278,173],{},[164,280,176],{}," e ",[164,283,179],{}," vivono i dati di qualcun altro, e sono quelle che meritano una serata.",[270,286,287],{},"Scrivi la regola prima di allargare qualsiasi altra cosa. Una policy che nomina una condizione (questa riga appartiene a questo utente autenticato) è ciò che rende innocua la chiave pubblicabile dentro la tua app.",[270,289,290],{},"Controlla la policy, non l'interruttore. Attivo con una regola che consente a tutti, visto da fuori, è identico a disattivato, e la tua dashboard mostra il primo caso come protetto.",[270,292,293],{},"Lascia stare le tabelle davvero pubbliche. Che un elenco prodotti o un articolo pubblicato siano leggibili è corretto, e toglierlo rompe la tua app senza guadagnarci nulla.",[270,295,296],{},"Dopo la modifica, prova come farebbe uno sconosciuto. Che la tua app mostri la cosa giusta dimostra cosa chiede la tua app, non cosa consegnerebbe il tuo database.",[10,298,299],{},"Controllarlo una volta è una serata. Tenere vera la risposta anche il mese\nprossimo è la parte che in una serata non ci sta, ed è per questo che abbiamo\ncostruito Reeve Care. Ripete questo stesso controllo sulla tua app a intervalli\nregolari e ti scrive quando la risposta peggiora, perché una tabella chiusa a\nmarzo e aperta a giugno non è una cosa che qualcuno noti da dentro la propria\napp.",[117,301],{"alt":302,"caption":303,"src":304},"Il logo Reeve Care accanto a due righe. Nella riga in alto una striscia di righe di tabella viene letta da una lente e segnata con una freccia di ripetizione. In quella in basso un database dentro un riquadro tratteggiato viene copiato in un file fuori dal riquadro, con una lente accanto alla copia.","I due compiti: il controllo riparte a intervalli regolari, e una copia del tuo database esce dal tuo account Supabase e viene riletta prima di essere contata.","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcare-watch-and-backup-1600x520.png",[10,306,307,308,198],{},"Tiene anche backup propri del tuo database Supabase, presi a intervalli\nregolari, conservati fuori dal tuo account Supabase e riletti per verifica prima\ndi essere contati, con un ripristino che salva lo stato attuale prima di\nriprodurre qualsiasi cosa. Questa seconda metà conta qui perché noi controlliamo\nsempre e solo la lettura. La stessa policy permissiva può consentire la\nscrittura, e uno sconosciuto che scrive nella tua tabella è la versione che la\nsvuota: a quel punto una copia di prima è l'unica cosa che rimette a posto le\nrighe. Care copre il tuo database, e i file caricati su Storage appena li colleghi, su\nSupabase e non su ogni tipo di database: ",[38,309,311],{"href":310},"\u002F#pricing","cosa sorveglia e quanto costa",[10,313,314,315,319,320,198],{},"Se preferisci procedere per elenco, la\n",[38,316,318],{"href":317},"\u002Fchecklist","checklist di sicurezza da 10 minuti"," copre questo insieme alle\naltre cose da chiudere in un'app appena lanciata. E se una tabella è rimasta\naperta per un po', quello che potrai annullare dopo dipende interamente da\n",[38,321,323],{"href":322},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","cosa stavi salvando",{"title":325,"searchDepth":326,"depth":326,"links":327},"",3,[328,330,331,332,333,334,335],{"id":29,"depth":329,"text":30},2,{"id":51,"depth":329,"text":52},{"id":150,"depth":329,"text":151},{"id":201,"depth":329,"text":202},{"id":219,"depth":329,"text":220},{"id":233,"depth":329,"text":234},{"id":261,"depth":329,"text":262},"Basi della sicurezza",null,"Chiunque può leggere il tuo database Supabase senza fare login? Abbiamo scansionato 30.998 app online create con i builder IA e misurato quante rispondono sì.",false,"md",[342,345,348,351,354],{"q":343,"a":344},"Come capisco se chiunque può leggere il mio database Supabase?","Due controlli risolvono quasi tutto. Nella dashboard di Supabase apri il Security Advisor: elenca ogni tabella con Row Level Security disattivato, e quelle sono leggibili da chiunque abbia la chiave che viaggia dentro la tua app. Poi apri le policy di ogni tabella che contiene persone, perché una tabella può superare il primo controllo ed essere comunque aperta: una policy che permette a tutti è attiva, valida, e nella dashboard appare come protetta. Se preferisci vederlo da fuori, la nostra scansione gratuita legge il tuo sito online come farebbe uno sconosciuto.",{"q":346,"a":347},"È grave se una delle mie tabelle è leggibile da chiunque?","Dipende dalla tabella, e sei l'unica persona che può deciderlo. Un elenco di prodotti, di articoli pubblicati o di locali su una mappa è fatto per essere letto da tutti, e una policy che lo consente è corretta. La stessa impostazione su una tabella di utenti, ordini o messaggi significa che degli sconosciuti leggono i tuoi clienti. Chiediti se pubblicheresti il contenuto di quella tabella su una pagina aperta, e lascia decidere la risposta.",{"q":349,"a":350},"Ho Row Level Security attivo. Vuol dire che le mie tabelle sono protette?","Non da solo. L'interruttore e le regole sono due cose diverse: attivo senza alcuna regola blocca tutti, compresa la tua stessa app, e attivo con una regola permissiva non blocca nessuno. La regola che viene scritta quando un'app si rompe dopo l'attivazione di Row Level Security è di solito quella che consente qualunque richiesta da chiunque: rimette in piedi l'app e lascia la tabella aperta. Leggi la policy sulla tabella, non l'interruttore.",{"q":352,"a":353},"La mia app ha una schermata di login. Non tiene fuori la gente dal database?","No. La schermata di login decide cosa mostra la tua app. Non decide cosa consegna il tuo database, perché una richiesta non deve per forza arrivare dalla tua app: la chiave che la tua app porta con sé è leggibile da qualsiasi visitatore e può essere usata direttamente contro il database. A decidere la risposta è Row Level Security su ogni singola tabella.",{"q":355,"a":356},"Cosa faccio per prima cosa se trovo una tabella che degli sconosciuti possono leggere?","Sistema la policy su quella tabella prima di ogni altra cosa, poi guarda cosa era raggiungibile mentre era aperta. Parti dalle tabelle che contengono persone, perché sono quelle con dentro i dati di qualcun altro. Se la tabella era aperta e contiene dati personali, verifica se le regole del tuo Paese ti obbligano ad avvisare qualcuno: è una domanda da avvocato, non da scanner.","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",[359,360,361,362,363],"chiunque può leggere il mio database supabase","database supabase pubblico","tabella supabase leggibile da tutti","lovable supabase sicurezza","supabase rls tabella esposta",{},true,"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","2026-08-18",{"title":5,"description":338},"blog\u002Fcan-anyone-read-your-supabase-database",[371,372,373],"Chiunque può leggere il tuo database Supabase senza fare login? Su 2.096 delle 3.680 app in cui il controllo è arrivato in fondo (il 57%), almeno una tabella ha risposto di sì.","Non è automaticamente una fuga di dati. Alcune tabelle devono essere pubbliche. Ma 394 di quelle app avevano aperta una tabella con un nome da persone: users, profiles, customers, orders.","La cosa di cui si viene messi in guardia di continuo, una chiave segreta lasciata nell'app, è comparsa 3 volte su 30.998 app. La tabella aperta è il caso comune.","N3CEwFS9AqclBtqzrdpZYk9dNYX005NMGke4cYDvL8s",1787826051015]