[{"data":1,"prerenderedAt":1007},["ShallowReactive",2],{"blog-it-is-lovable-safe":3,"blog-index-it":773},{"id":4,"title":5,"body":6,"category":725,"cover":726,"coverAlt":727,"description":728,"draft":729,"extension":730,"faq":731,"image":750,"keywords":751,"meta":761,"navigation":762,"ogTitle":763,"path":764,"published":765,"seo":766,"stem":767,"tldr":768,"updated":765,"__hash__":772},"blog_it\u002Fblog\u002Fis-lovable-safe.md","Lovable è sicuro? Cosa abbiamo trovato in 18.554 app Lovable",{"type":7,"value":8,"toc":708},"minimark",[9,13,21,24,29,32,35,57,60,66,70,83,220,223,228,240,247,251,254,264,275,287,290,301,305,308,314,319,340,347,351,354,361,367,374,386,390,393,400,407,410,414,417,420,426,429,433,436,439,534,542,555,562,566,569,577,581,584,619,632,636,639,642,653,664,672,676,700],[10,11,12],"p",{},"Hai costruito qualcosa su Lovable, funziona, e stai per metterci persone vere.\nDa qualche parte in quella settimana hai digitato \"lovable è sicuro\" in un campo\ndi ricerca, e quello che è tornato era o una pagina su una divulgazione di\nsicurezza del 2025 o un fornitore che ti vendeva una scansione. Nessuna delle\ndue diceva una parola sull’app che stai per pubblicare.",[10,14,15,16,20],{},"Ecco cosa sbaglia la maggior parte di quelle risposte: ",[17,18,19],"strong",{},"\"Lovable è sicuro\" sono\ntre domande vestite da una frase sola",", e quella che decide se degli\nsconosciuti possono leggere i dati dei tuoi utenti è quella che quasi nessuno\nmisura.",[10,22,23],{},"Noi possiamo misurarla. Tra il 12 e il 14 agosto 2026 abbiamo passato 30.998 app\nonline per gli stessi nove controlli esterni che chiunque può lanciare\ngratuitamente dalla nostra homepage, e 18.554 di quelle erano pubblicate su\nLovable. È la coorte più grande che abbiamo, tre app su cinque fra tutte quelle\nche abbiamo mai scansionato. Questo è ciò che è tornato per loro, e dove si\nferma la nostra vista.",[25,26,28],"h2",{"id":27},"lovable-è-sicuro","Lovable è sicuro?",[10,30,31],{},"Come piattaforma sì, e con un margine più ampio di quanto ci aspettassimo. Ciò\nche Lovable produce è risultato il più pulito dei cinque costruttori misurati.\nTutto ciò che ha deciso un voto stava dentro l’app costruita dal suo\nproprietario.",[10,33,34],{},"Pensalo come un negozio con il magazzino dall’altra parte della strada. Lovable\ncostruisce il negozio: le vetrine, il bancone, l’insegna. Il magazzino è di\nSupabase, e ha la propria serratura sulla propria porta. Cosa il negozio\nconsegna a un passante è una domanda. Cosa il magazzino consegna a chiunque si\navvicini e chieda è tutta un’altra cosa, e nessun riordino del negozio la\ncambia.",[36,37,38,45,51],"ol",{},[39,40,41,44],"li",{},[17,42,43],{},"La piattaforma."," Lovable pubblica la tua app come si deve: un certificato\nvalido, un dominio che non scade, niente che filtri dalla build. Questo è il\nnegozio.",[39,46,47,50],{},[17,48,49],{},"L’agente."," Il codice che scrive l’IA di Lovable tiene. Nessuna scansione\nesterna vede il cablaggio, e questo articolo lo dice invece di tirare a\nindovinare.",[39,52,53,56],{},[17,54,55],{},"L’app che hai pubblicato."," Cosa raggiunge uno sconosciuto dal\nmarciapiede: una chiave nel codice che un browser scarica, un bucket di\nstorage che elenca i suoi file, una tabella di database che risponde a\nchiunque chieda.",[10,58,59],{},"I nostri controlli leggono la terza e due parti della prima. Sulla piattaforma,\nil certificato era valido su tutte le 18.486 app dove ne abbiamo potuto leggere\nuno, e nemmeno un dominio su 18.554 era vicino alla scadenza. Sull’agente non\nabbiamo nulla da misurare. Sull’app abbiamo 18.554 risposte.",[61,62],"diagram",{"alt":63,"caption":64,"src":65},"Tre riquadri affiancati. Il primo porta il logo Lovable con un lucchetto e un certificato. Il secondo porta un segno di codice con sopra un bagliore. Il terzo porta una pagina di browser con un database separato all’esterno, tre visitatori che si protendono verso entrambi, e una lente solo su quel riquadro, con il numero 18.554 sotto.","Tre domande dentro una ricerca. Una scansione dall’esterno legge il terzo riquadro e parte del primo, e nulla di quello centrale.","\u002Fblog\u002Fis-lovable-safe\u002Fthree-questions-1600x700.png",[25,67,69],{"id":68},"cosa-abbiamo-trovato-in-18554-app-lovable","Cosa abbiamo trovato in 18.554 app Lovable",[10,71,72,73,76,77,82],{},"Nove controlli, dall’esterno, senza accesso e senza entrare nell’account di\nnessuno. Non abbiamo mai letto una riga: dove un database rispondeva, abbiamo\nchiesto quante righe avrebbe consegnato e ci siamo fermati lì. Nessuna app viene\nnominata qui né altrove in ciò che pubblichiamo. Ogni quota qui sotto è sulle\napp su cui il controllo ha ",[17,74,75],{},"risposto",", perché un controllo che non è riuscito\na finire è sconosciuto e non superato, ed è quella regola a far muovere i\ndenominatori. Metodo e dati sono\n",[78,79,81],"a",{"href":80},"\u002Fresearch\u002Fvibe-coded-app-security-2026","nel rapporto",".",[84,85,86,103],"table",{},[87,88,89],"thead",{},[90,91,92,96,100],"tr",{},[93,94,95],"th",{},"Cosa abbiamo controllato",[93,97,99],{"align":98},"right","App Lovable",[93,101,102],{},"Chi lo decide",[104,105,106,118,129,139,149,160,170,180,199,210],"tbody",{},[90,107,108,112,115],{},[109,110,111],"td",{},"Header di sicurezza del browser mancanti",[109,113,114],{"align":98},"18.539 su 18.554 (99 %)",[109,116,117],{},"L’hosting di Lovable",[90,119,120,123,126],{},[109,121,122],{},"Una tabella di database leggibile senza accesso",[109,124,125],{"align":98},"2.017 su 3.553 (57 %)",[109,127,128],{},"La tua app",[90,130,131,134,137],{},[109,132,133],{},"Qualcosa a forma di chiave nel codice che un visitatore scarica",[109,135,136],{"align":98},"822 su 18.554 (4 %)",[109,138,128],{},[90,140,141,144,147],{},[109,142,143],{},"Un bucket di storage che elenca i suoi file",[109,145,146],{"align":98},"768 su 16.565 (5 %)",[109,148,128],{},[90,150,151,154,157],{},[109,152,153],{},"Codice sorgente originale pubblicato (source map)",[109,155,156],{"align":98},"225 su 18.553 (1 %)",[109,158,159],{},"Un’impostazione di build",[90,161,162,165,168],{},[109,163,164],{},"Una rotta API che ha consegnato dati a uno sconosciuto",[109,166,167],{"align":98},"8 su 18.518",[109,169,128],{},[90,171,172,175,178],{},[109,173,174],{},"Qualunque sito autorizzato a chiamare la tua API",[109,176,177],{"align":98},"0 su 18.518",[109,179,128],{},[90,181,182,194,197],{},[109,183,184,185,189,190,193],{},"Un file privato come ",[186,187,188],"code",{},".env"," o ",[186,191,192],{},".git\u002Fconfig"," a un URL aperto",[109,195,196],{"align":98},"0 su 18.442",[109,198,128],{},[90,200,201,204,207],{},[109,202,203],{},"Certificato scaduto o non attendibile",[109,205,206],{"align":98},"0 su 18.486",[109,208,209],{},"Lovable",[90,211,212,215,218],{},[109,213,214],{},"Dominio prossimo alla scadenza",[109,216,217],{"align":98},"0 su 18.554",[109,219,209],{},[10,221,222],{},"I voti: 15.963 A, 370 B, 1.814 C, 402 D e 5 F. Nove app non avevano alcun\nrilievo.",[61,224],{"alt":225,"caption":226,"src":227},"Sei barre orizzontali su un’unica scala, ciascuna preceduta da un piccolo segno e seguita da un numero: 18.539 per gli header, 2.017 per le tabelle esposte, 822 per le chiavi, 768 per i bucket di storage, 225 per le source map e 8 per le rotte aperte. La barra in alto è grigio pallido e le altre turchesi, e l’8 è un tratto sottile con un anello attorno.","Numeri di app, non tassi: una scala, sei rilievi. La barra grigia è decisa dall’hosting. Ogni barra turchese discendeva da qualcosa dentro l’app. La riga delle tabelle esposte si misura su un denominatore più piccolo, che l’immagine successiva smonta.","\u002Fblog\u002Fis-lovable-safe\u002Fwhat-we-found-1600x680.png",[10,229,230,231,234,235,239],{},"Quella prima riga è il motivo per cui \"il 99 % delle app Lovable ha un problema\ndi sicurezza\" è una frase che leggerai da qualche parte e dovresti ignorare. Gli\nheader di sicurezza del browser li manda ciò che serve la tua pagina, e su\n",[186,232,233],{},"tuaapp.lovable.app"," è Lovable, ed è per questo che ogni app su quell’host\nriceve la stessa risposta. ",[78,236,238],{"href":237},"\u002Fblog\u002Fmissing-security-headers","Vale la pena averli","\ne non sono ciò di cui è fatta una D.",[10,241,242,243,246],{},"Togli quella riga e ",[17,244,245],{},"15.453 delle 18.554 app non avevano nient’altro",". Le\n3.092 rimanenti sono il resto di questo articolo.",[25,248,250],{"id":249},"cosa-lovable-fa-bene-ed-è-quasi-tutta-la-lista","Cosa Lovable fa bene, ed è quasi tutta la lista",[10,252,253],{},"Tre dei numeri qui sopra sono i migliori che abbiamo registrato su qualunque\ncostruttore, e tutti e tre li decide la piattaforma e non tu.",[10,255,256,259,260,82],{},[17,257,258],{},"Le source map."," 225 app Lovable su 18.553 pubblicano i file originali dietro\nl’app, commenti compresi. Fa circa 1 su 80. Su Base44 lo stesso controllo scatta\nsul 59 % delle app, e su Replit sul 6 %. La build di produzione di Lovable fa la\ncosa giusta per impostazione predefinita, quindi\n",[78,261,263],{"href":262},"\u002Fblog\u002Fsource-maps-exposed-in-production","questo di solito non è un tuo problema",[10,265,266,269,270,274],{},[17,267,268],{},"Gli header cross-origin."," Zero app su 18.518 hanno detto a un sito qualunque\ndel mondo che poteva chiamare la loro API, e zero lo hanno permesso con i cookie\ndi accesso del visitatore. È il rilievo che\n",[78,271,273],{"href":272},"\u002Fblog\u002Fcors-wildcard-security-risk","più facilmente lascia un altro sito agire come il tuo utente",",\ne su Lovable non è comparso nemmeno una volta.",[10,276,277,280,281,283,284,286],{},[17,278,279],{},"File privati smarriti."," Zero app su 18.442 servivano un ",[186,282,188],{}," o un\n",[186,285,192],{}," da un URL normale. Un’app Lovable non ha un server proprio da\nconfigurare male, quindi non c’è nessun file dimenticato sul retro.",[10,288,289],{},"Niente di tutto questo è un premio di consolazione. È la parte del lavoro a cui\nnon hai dovuto pensare e a cui, sulla maggior parte degli altri costruttori,\nqualcuno pensa.",[291,292,294],"callout",{"type":293},"note",[10,295,296,297,82],{},"Gratis, senza account, circa 20 secondi: la scansione sulla nostra homepage\nesegue tutti e nove questi controlli sulla tua app online e scrive \"Non è stato\npossibile controllare\" invece di una spunta per tutto ciò a cui non ha avuto\nrisposta. ",[78,298,300],{"href":299},"\u002Fsecurity-scanner","Scansiona la tua app",[25,302,304],{"id":303},"lunico-numero-che-conta-2017-su-3553","L’unico numero che conta: 2.017 su 3.553",[10,306,307],{},"Delle app Lovable il cui database Supabase siamo davvero riusciti a interrogare,\nil 57 % ha consegnato righe a una richiesta che non portava alcun accesso.",[10,309,310,311,82],{},"Vale la pena percorrere i denominatori, perché questo è il numero che tutti\ncitano e quasi nessuno inquadra. Su 18.554 app Lovable, 6.532 nominavano un\nprogetto Supabase nel codice che consegnano. Di quelle, 3.553 hanno risposto\nabbastanza bene da permetterci di giudicare, e le altre 2.979 no, quindi sono\nsconosciute e non pulite. Delle 3.553, ",[17,312,313],{},"2.017 hanno restituito righe a uno\nsconosciuto",[61,315],{"alt":316,"caption":317,"src":318},"Un imbuto disegnato come quattro barre impilate che si restringono: 18.554 app Lovable, 6.532 che nominavano un progetto Supabase, 3.553 il cui database ha dato una risposta utilizzabile, e 2.017 che hanno restituito righe senza accesso. L’ultima barra è rossa e la terza porta un punto interrogativo per le 2.979 che non è stato possibile giudicare.","Quattro denominatori, non uno. La barra che viene citata come titolo è l’ultima, e si misura sulla terza.","\u002Fblog\u002Fis-lovable-safe\u002Fwhere-it-lands-1600x620.png",[10,320,321,322,325,326,329,330,329,333,329,336,339],{},"In ",[17,323,324],{},"373"," di quelle app la tabella che rispondeva aveva un nome di persone:\n",[186,327,328],{},"users",", ",[186,331,332],{},"profiles",[186,334,335],{},"orders",[186,337,338],{},"messages",". Sono 373 app, non 373 tabelle. Nelle\naltre 1.644 era qualcosa che dall’esterno non abbiamo potuto nominare: forse un\ncatalogo prodotti che doveva essere pubblico da sempre, forse tutt’altro.",[10,341,342,343,346],{},"Misurate su tutte le app Lovable scansionate invece che sul sottoinsieme che\nabbiamo potuto giudicare, 2.017 su 18.554 fanno circa ",[17,344,345],{},"11 su 100",". Tieni a\nmente quel numero per due sezioni.",[25,348,350],{"id":349},"perché-ricade-sul-database-e-non-su-lovable","Perché ricade sul database e non su Lovable",[10,352,353],{},"Per una scelta di progettazione che è corretta, deliberata, e quasi mai spiegata\nalla persona che riguarda.",[10,355,356,357,360],{},"Un’app Lovable non ha un server proprio. La pagina nel browser del visitatore\nparla direttamente con Supabase, ed è per questo che il tutto si può costruire\nin un pomeriggio e per questo che così poche di queste app hanno una rotta API\naperta: non c’è nessuna API tua da lasciare aperta. Perché funzioni, l’indirizzo\ndel tuo database e una chiave per raggiungerlo devono essere stampati dentro\nl’app, dove chiunque può leggerli. Quella chiave è la chiave ",[17,358,359],{},"pubblicabile",", e\nil fatto che sia pubblica è corretto. Deve stare lì.",[10,362,363,364,366],{},"Il che significa che l’unica cosa tra uno sconosciuto e la tua tabella ",[186,365,328],{}," è\nun’impostazione Supabase per tabella chiamata Row Level Security. Accesa e con\nuna policy scritta, la chiave pubblica legge solo le righe che quella policy\nconsente. Spenta, la chiave pubblica legge la tabella.",[10,368,369,370,373],{},"Ora la parte che decide la maggior parte dei progetti Lovable. Supabase accende\nRow Level Security per impostazione predefinita sulle tabelle che crei\ncliccando nel Table Editor. Le tabelle create ",[17,371,372],{},"eseguendo SQL"," non la ricevono,\ned eseguire SQL è il modo in cui un costruttore crea tabelle per te. La forma\nconsueta di un progetto Lovable è quindi: qualche tabella fatta a mano, che è\nprotetta, accanto a quelle generate, che potrebbero non esserlo. Le due sembrano\nidentiche. Nessuna si lamenta. L’app funziona perfettamente in entrambi i casi,\ne questo è tutto il problema: nulla di ciò che vedi da davanti ti dice quale\ndelle due hai.",[10,375,376,377,381,382,82],{},"La versione lunga, con l’SQL,\n",[78,378,380],{"href":379},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","è qui",", e la guida in linguaggio\nsemplice per questa piattaforma è\n",[78,383,385],{"href":384},"\u002Fis-your-lovable-app-safe","la tua app Lovable è sicura",[25,387,389],{"id":388},"la-policy-che-cancella-lerrore-e-lascia-la-tabella-aperta","La policy che cancella l’errore e lascia la tabella aperta",[10,391,392],{},"Accendere Row Level Security è il passo uno di due, ed è al passo due che un\nassistente IA fa molto volentieri la cosa sbagliata.",[10,394,395,396,399],{},"Con l’impostazione accesa e nessuna policy scritta, la tua stessa app smette di\nfunzionare. Ottieni un errore, lo incolli nella chat, e torna qualcosa che fa\nsparire l’errore. Molto spesso ciò che torna è una policy che consente a tutti,\nscritta come ",[186,397,398],{},"using (true)",". È una policy valida. Soddisfa il requisito che una\npolicy esista. Consente ogni riga a ogni richiesta.",[10,401,402,403,82],{},"Il pannello ora segnala la tabella come protetta, l’errore è sparito, la tua app\nfunziona, e la tabella è leggibile esattamente come prima. Su questo abbiamo un\narticolo intero perché è il fallimento più convincente di tutto lo stack:\n",[78,404,406],{"href":405},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","RLS è acceso e la tua tabella è ancora pubblica",[10,408,409],{},"Se hai mai incollato un errore di Row Level Security in una finestra di chat e\naccettato la prima correzione che ha fatto passare la build, vai a leggere\nquella policy oggi.",[25,411,413],{"id":412},"cve-2025-48757-e-perché-non-è-più-la-tua-domanda","CVE-2025-48757, e perché non è più la tua domanda",[10,415,416],{},"È reale, è stata seria, e dal lato di Lovable è chiusa da oltre un anno. Non è\nnemmeno ciò che dovresti controllare.",[10,418,419],{},"A maggio 2025 il ricercatore di sicurezza Matt Palmer ha pubblicato\nCVE-2025-48757, sulle app Lovable le cui tabelle Supabase avevano Row Level\nSecurity assente o scritta in modo troppo permissivo. Ha scansionato 1.645 app\nLovable e ne ha trovate 170 con database esposti. La risposta di Lovable è stata\naggiungere un controllo di sicurezza che gira prima della pubblicazione e\navverte sulle tabelle non protette.",[10,421,422,423],{},"Ed ecco la lettura onesta, ed è il motivo per cui la CVE è l’inquadratura\nsbagliata. Quella divulgazione trovava circa 10 app esposte ogni 100. Sedici\nmesi dopo, su una coorte undici volte più grande, ne abbiamo trovate circa 11\nogni 100. I denominatori non sono identici e nessuno dei due campioni è\nl’internet intero, quindi prendi i due come lo stesso ordine di grandezza e non\ncome un confronto preciso. La direzione è abbastanza chiara: ",[17,424,425],{},"il tasso non è\nsceso.",[10,427,428],{},"Non è una correzione fallita. È il segno che non è mai stata davvero una\nvulnerabilità di un prodotto. È un’impostazione sulle tue tabelle, nel tuo\nprogetto Supabase, che nessun altro può accendere al posto tuo. Una patch lì non\narriva, ed è esattamente per questo che ci arriva un controllo che esegui tu.",[25,430,432],{"id":431},"di-cosa-erano-fatte-davvero-le-822-chiavi","Di cosa erano fatte davvero le 822 chiavi",[10,434,435],{},"Quasi tutte andavano bene, e uno scanner che ti dicesse il contrario ti starebbe\ninsegnando a ignorarlo.",[10,437,438],{},"822 delle 18.554 app Lovable avevano qualcosa a forma di chiave nel codice che\nun visitatore scarica. Letta come un elenco di forme, fa il 4 % delle app che\n\"perdono segreti\". Letta come ciò che ogni chiave può davvero fare, viene così:",[84,440,441,454],{},[87,442,443],{},[90,444,445,448,451],{},[93,446,447],{},"Cosa abbiamo trovato nel bundle",[93,449,450],{"align":98},"App",[93,452,453],{},"Cosa significa",[104,455,456,467,478,489,499,509,523],{},[90,457,458,461,464],{},[109,459,460],{},"Una chiave API Google",[109,462,463],{"align":98},"727",[109,465,466],{},"Di solito corretta, una volta limitata al tuo dominio",[90,468,469,472,475],{},[109,470,471],{},"Un segreto non attribuibile",[109,473,474],{"align":98},"82",[109,476,477],{},"Non siamo riusciti a dire a quale fornitore appartiene",[90,479,480,483,486],{},[109,481,482],{},"Una chiave OpenAI",[109,484,485],{"align":98},"18",[109,487,488],{},"Addebita sul tuo account, direttamente",[90,490,491,494,497],{},[109,492,493],{},"Una chiave di accesso AWS",[109,495,496],{"align":98},"7",[109,498,488],{},[90,500,501,504,507],{},[109,502,503],{},"Una chiave Anthropic",[109,505,506],{"align":98},"3",[109,508,488],{},[90,510,511,518,520],{},[109,512,513,514,517],{},"Un ",[186,515,516],{},"service_role"," Supabase",[109,519,506],{"align":98},[109,521,522],{},"Legge e scrive ogni riga di ogni tabella, ignora ogni regola",[90,524,525,528,531],{},[109,526,527],{},"Un segreto Stripe di produzione",[109,529,530],{"align":98},"2",[109,532,533],{},"Il tuo account pagamenti",[10,535,536,537,541],{},"Le 727 chiavi Google sono il motivo per cui classifichiamo invece di limitarci a\nriconoscere forme. Una chiave Google Maps in un browser è dove deve stare, e la\ncorrezione è\n",[78,538,540],{"href":539},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","limitarla al tuo dominio"," invece di\nfarsi prendere dal panico.",[10,543,544,545,547,548,550,551,82],{},"Sono le ultime quattro righe a contare, e sono rare: 30 app su 18.554. Sono\nanche i rilievi che costano denaro da soli, e di solito emergono come una\nfattura che arriva prima che qualcuno se ne accorga. Due dettagli a verbale.\nTutte e tre le chiavi ",[186,546,516],{}," dell’intera scansione su 30.998 app erano\nin app Lovable, e così due dei tre segreti Stripe di produzione. Una chiave\n",[186,549,516],{}," nel browser rende irrilevante in una riga ogni policy di Row\nLevel Security del tuo progetto, ed è per questo che è l’unico rilievo che\nclassifichiamo critico a vista e quello\n",[78,552,554],{"href":553},"\u002Fblog\u002Frotate-supabase-service-role-key","da ruotare in giornata",[10,556,557,558,82],{},"Distinguere i due tipi richiede circa un minuto, e\n",[78,559,561],{"href":560},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","abbiamo scritto la guida",[25,563,565],{"id":564},"i-768-bucket-di-storage-che-nessuno-voleva-aprire","I 768 bucket di storage che nessuno voleva aprire",[10,567,568],{},"Un bucket Supabase contrassegnato come pubblico non serve solo i file a cui la\ntua app rimanda. Elenca anche ogni file che contiene a chiunque lo chieda.",[10,570,571,572,576],{},"768 delle 16.565 app Lovable controllabili avevano almeno un bucket che elencava\nil proprio contenuto. Il motivo è lo stesso delle tabelle leggibili: rendere\npubblico un bucket è il modo per far comparire un’immagine, funziona subito, e\ndopo nulla ti dice che l’elenco era compreso. Fatture caricate, foto di\ndocumenti e avatar degli utenti finiscono tutti nello stesso posto.\n",[78,573,575],{"href":574},"\u002Fblog\u002Fsupabase-storage-bucket-public","Cosa espone davvero un bucket pubblico","\ncopre la correzione, che sono URL firmati e non un bucket privato da cui poi non\nriesci a leggere.",[25,578,580],{"id":579},"il-controllo-di-cinque-minuti-sulla-tua-app-lovable","Il controllo di cinque minuti sulla tua app Lovable",[10,582,583],{},"Ogni punto è una pagina che apri. Usa una finestra privata, così il tuo accesso\nnon risponde al posto di uno sconosciuto.",[36,585,586,592,598,604,610],{},[39,587,588,591],{},[17,589,590],{},"Supabase → Authentication → Policies."," Scorri l’elenco. Qualunque tabella\nche mostri Row Level Security disattivata è leggibile da chiunque abbia\nl’indirizzo del tuo progetto, che è stampato nella tua app.",[39,593,594,597],{},[17,595,596],{},"Leggi le policy delle tabelle che invece ce l’hanno accesa."," Se una\nconsente a tutti, la tabella è aperta e il pannello continua a chiamarla\nprotetta.",[39,599,600,603],{},[17,601,602],{},"Supabase → Storage."," Qualunque bucket contrassegnato come pubblico elenca\ni suoi file a chiunque. Guarda cosa c’è dentro prima di decidere che va bene.",[39,605,606,609],{},[17,607,608],{},"Supabase → Settings → API."," Conferma che la chiave che la tua app consegna\nsia quella pubblicabile. Se una chiave segreta è mai stata incollata nel\nprogetto, ruotala lì prima di cancellarla dal codice, perché il vecchio\nvalore funziona finché non lo fai.",[39,611,612,615,616,82],{},[17,613,614],{},"Oppure lascia fare alla scansione."," Esegue quei quattro dall’esterno e\naltri cinque, impiega circa 20 secondi, non chiede un account, e ti mostra un\nvoto e cosa lo ha prodotto: ",[78,617,618],{"href":299},"scansiona la tua app",[10,620,621,622,626,627,631],{},"Se preferisci percorrere l’intera superficie come un elenco, la\n",[78,623,625],{"href":624},"\u002Fchecklist","checklist di sicurezza in 10 minuti"," copre ciò che vale la pena\nconfermare su qualunque app appena lanciata, e\n",[78,628,630],{"href":629},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","chiunque può leggere il tuo database Supabase","\nè il test da fare se ne fai uno solo.",[25,633,635],{"id":634},"la-tua-app-cambia-a-ogni-pubblicazione","La tua app cambia a ogni pubblicazione",[10,637,638],{},"Una scansione lanciata il mese scorso descrive l’app del mese scorso, e su\nLovable è un mese più corto della media.",[10,640,641],{},"Pubblicare è un clic, quindi una modifica è online nel momento in cui la\naccetti. Non c’è nessun passaggio di deploy tra te e internet a intercettare una\ntabella aggiunta stamattina senza Row Level Security, o una chiave incollata\nnella chat a mezzanotte per superare una build che falliva. Ognuno dei 2.017\ndatabase esposti che abbiamo trovato apparteneva a qualcuno la cui app\nfunzionava benissimo.",[10,643,644,648,649,652],{},[78,645,647],{"href":646},"\u002Fpricing","Reeve Monitor"," è la versione di questo articolo che si esegue da\nsola. Ripete tutti e nove i controlli ogni ora su un massimo di tre app, guarda\nogni 60 secondi se l’app risponde, ti avvisa quando un risultato ",[17,650,651],{},"cambia","\ninvece di aspettare che tu guardi, e manda un rapporto mensile. Costa €12 al\nmese a listino, con sette giorni gratuiti prima dell’addebito; la pagina dei\nprezzi sta a volte sotto la cifra indicata qui e mai sopra.",[10,654,655,658,659,663],{},[17,656,657],{},"Se la tua app Lovable usa Supabase, e 6.532 delle 18.554 scansionate lo fanno,\nl’altra metà del problema è la copia."," Una tabella esposta è una cosa che uno\nsconosciuto può leggere. Un agente con accesso al database, o una migrazione\nandata al contrario, è una cosa che può cancellarla, e il backup giornaliero di\nSupabase sul piano gratuito non è qualcosa che tu possa ripristinare da solo.\n",[78,660,662],{"href":661},"\u002Fsupabase-backups","Reeve Care"," prende ogni notte una copia cifrata del tuo\ndatabase Supabase, la tiene dove il tuo progetto non arriva, verifica che ogni\ncopia si ripristini davvero, e ti dà un ripristino in un clic quando serve.\nTutto ciò che fa Monitor è incluso. Care costa €49 al mese a listino per un’app,\ncon gli stessi sette giorni gratuiti.",[10,665,666,667,671],{},"La forma di quel secondo fallimento, raccontata da qualcuno a cui è successo, è\n",[78,668,670],{"href":669},"\u002Fblog\u002Fai-agent-deleted-my-database","il giorno in cui un agente IA ha cancellato un database di produzione",".\nNessuno dei nove controlli di questo articolo avrebbe aiutato lì. Una copia sì.",[25,673,675],{"id":674},"cosa-fare-questa-settimana","Cosa fare questa settimana",[677,678,679],"key-takeaways",{},[680,681,682,685,688,691,697],"ul",{},[39,683,684],{},"Apri Supabase → Authentication → Policies e leggi l’elenco. Qualunque tabella con Row Level Security disattivata è leggibile da chiunque abbia l’indirizzo della tua app.",[39,686,687],{},"Leggi le policy delle tabelle che ce l’hanno accesa. Una che consente a tutti lascia la tabella aperta mentre il pannello la segnala come protetta.",[39,689,690],{},"Controlla in Storage i bucket pubblici. Un bucket pubblico elenca ogni file che contiene, non solo quelli a cui la tua app rimanda.",[39,692,693,694,696],{},"Conferma che la chiave nella tua app sia quella pubblicabile. Una chiave ",[186,695,516],{}," nel browser rende irrilevante ogni policy che hai scritto, ed è un lavoro da fare in giornata.",[39,698,699],{},"Tieni una copia del tuo database dove il tuo progetto e il tuo agente non arrivano, e verifica che quella copia si ripristini.",[10,701,702,703,707],{},"Lovable ha fatto bene la sua metà. I 2.017 sono la metà che è tua, ed è\nun’impostazione e non una riscrittura. Se invece vuoi il confronto tra\ncostruttori,\n",[78,704,706],{"href":705},"\u002Fblog\u002Fsafest-ai-app-builder","quale costruttore di app con IA è il più sicuro","\nha la tabella per tutti e cinque.",{"title":709,"searchDepth":710,"depth":710,"links":711},"",3,[712,714,715,716,717,718,719,720,721,722,723,724],{"id":27,"depth":713,"text":28},2,{"id":68,"depth":713,"text":69},{"id":249,"depth":713,"text":250},{"id":303,"depth":713,"text":304},{"id":349,"depth":713,"text":350},{"id":388,"depth":713,"text":389},{"id":412,"depth":713,"text":413},{"id":431,"depth":713,"text":432},{"id":564,"depth":713,"text":565},{"id":579,"depth":713,"text":580},{"id":634,"depth":713,"text":635},{"id":674,"depth":713,"text":675},"Basi della sicurezza","\u002Fblog\u002Fis-lovable-safe\u002Fcover-1200x630.png","Il logo Lovable su una tessera bianca, una freccia verso l’app pubblicata, una verso tre visitatori, e un database appeso sotto l’app.","Lovable è sicuro? Abbiamo passato 18.554 app Lovable online per nove controlli. La piattaforma è risultata la più pulita di cinque. I rilievi stavano nelle app.",false,"md",[732,735,738,741,744,747],{"q":733,"a":734},"Lovable è abbastanza sicuro per un prodotto vero?","Sul lato piattaforma è risultato il più pulito dei cinque costruttori che abbiamo scansionato. Ogni certificato che siamo riusciti a leggere era valido, nessun dominio era vicino alla scadenza, nessuna app permetteva a un sito qualunque del mondo di chiamare la sua API, e 225 su 18.553 pubblicavano il codice sorgente. A decidere se il tuo prodotto è sicuro lì è il database dietro: 2.017 delle 3.553 app Lovable il cui Supabase siamo riusciti a interrogare hanno consegnato righe a una richiesta senza accesso. È un’impostazione sulle tue tabelle, è tua, e la controlli in circa cinque minuti.",{"q":736,"a":737},"Le persone possono vedere il codice sorgente della mia app Lovable?","La metà del browser sempre, perché un browser non può disegnare una pagina che non gli è stata inviata. Quello che normalmente non leggono sono i tuoi file originali con commenti e nomi di variabili, ed è esattamente ciò che consegna una source map pubblicata. 225 delle 18.553 app Lovable che abbiamo controllato ne pubblicavano una, circa 1 su 80, il tasso più basso di tutti i costruttori misurati. Le tue query al database sono un’altra faccenda: un’app Lovable parla con Supabase direttamente dal browser, quindi i nomi di tabelle e colonne che legge sono visibili a chiunque apra la scheda di rete.",{"q":739,"a":740},"I miei dati Supabase sono al sicuro in un’app Lovable?","Dipende da una sola impostazione per tabella e da nient’altro. Un’app Lovable raggiunge Supabase direttamente dal browser del visitatore con una chiave pubblicabile che deve essere pubblica, quindi l’unica cosa tra uno sconosciuto e una tabella è Row Level Security. Spenta, quella chiave pubblica legge l’intera tabella. Lo abbiamo misurato su 3.553 app Lovable e 2.017 hanno risposto con righe a una richiesta anonima. In 373 di quelle la tabella esposta aveva un nome di persone: users, profiles, orders, messages.",{"q":742,"a":743},"Cos’era CVE-2025-48757 e mi riguarda ancora?","È la divulgazione del 2025 del ricercatore di sicurezza Matt Palmer sulle app Lovable le cui tabelle Supabase avevano Row Level Security assente o scritta in modo troppo permissivo. Ha scansionato 1.645 app Lovable e ne ha trovate 170 con database esposti. Lovable ha risposto aggiungendo un controllo di sicurezza che gira prima della pubblicazione. Non è una patch che stai aspettando, e non lo è mai stata, perché l’esposizione è un’impostazione sulle tue tabelle e non un difetto nel codice di Lovable, ed è per questo che i nostri numeri del 2026 somigliano così tanto ai suoi del 2025. Se ti riguardi o no si risolve oggi aprendo una pagina in Supabase.",{"q":745,"a":746},"Il controllo di sicurezza di Lovable trova una tabella esposta?","Lovable esegue prima della pubblicazione un controllo che legge il tuo progetto dall’interno: lo schema, le policy, le dipendenze. Vede cose che una scansione esterna strutturalmente non può vedere, come una tabella che il tuo front end non nomina mai. Quello che non può dimostrare è che una policy tenga davvero, perché una policy può esistere, sembrare valida e restituire comunque ogni riga a chiunque. Le due visuali rispondono a domande diverse, quindi esegui quella interna prima di pubblicare e una esterna dopo, e se si contraddicono vince la risposta dall’esterno.",{"q":748,"a":749},"Lovable è più sicuro di Bolt o Replit?","Su ciò che decide la piattaforma, Lovable è arrivato davanti agli altri quattro che abbiamo misurato: meno source map pubblicate di chiunque altro, nessun header cross-origin aperto, e nessun problema di certificato o dominio. Su ciò che decide il proprietario somiglia a tutto il resto, perché quei rilievi discendono da come un’app è stata costruita e non da dove. Il confronto completo lo abbiamo messo in un articolo a parte invece di ripetere qui la tabella.","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",[752,753,754,755,756,757,758,759,760],"lovable è sicuro","sicurezza lovable","lovable è affidabile","le app lovable sono sicure","sicurezza lovable supabase","lovable rls","lovable in produzione","problemi di sicurezza lovable","fuga di dati lovable",{},true,"Lovable è sicuro? Cosa abbiamo trovato in 18.554 app","\u002Fblog\u002Fis-lovable-safe","2026-09-21",{"title":5,"description":728},"blog\u002Fis-lovable-safe",[769,770,771],"Lovable è sicuro? La piattaforma è risultata la più pulita dei cinque costruttori che abbiamo misurato. 225 app su 18.553 pubblicavano il proprio codice sorgente, nessuna diceva a un sito qualunque che poteva chiamare la sua API, e 15.963 su 18.554 hanno preso una A.","Tutto ciò che abbiamo trovato di serio stava dentro l’app costruita dal suo proprietario. Delle 3.553 app Lovable il cui database Supabase siamo riusciti a interrogare, 2.017 hanno consegnato righe a una richiesta senza alcun accesso.","Fa circa 11 app Lovable su 100 nella nostra scansione. Un ricercatore che misurava la stessa cosa a maggio 2025 ne trovava 10 su 100: sedici mesi dopo il tasso non si è mosso.","e66NG57gK4YEQJnygiQ3gwZcVtDsS7UiUOb4JHE7pvI",[774,781,787,788,794,800,806,812,818,824,830,836,842,847,852,858,863,869,875,881,886,892,898,904,910,916,922,928,934,939,945,951,956,961,966,971,975,981,987,992,997,1003],{"path":775,"title":776,"description":777,"published":778,"category":779,"image":780,"draft":729},"\u002Fblog\u002Fsupabase-backup-auth-users","Perché nel tuo dump Supabase non ci sono utenti","Lancia supabase db dump da solo e ottieni la forma del tuo database e nessuna delle sue righe, senza lo schema auth in cui vivono i tuoi utenti.","2026-09-23","Backups","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":782,"title":783,"description":784,"published":785,"category":725,"image":786,"draft":729},"\u002Fblog\u002Fdomain-and-certificate-expiry","Dominio scaduto, sito offline: cosa succede adesso","Il tuo dominio è scaduto e il sito è offline. Il conto alla rovescia che parte, perché il certificato è il problema minore, e come controllarli entrambi.","2026-09-22","\u002Fblog\u002Fdomain-and-certificate-expiry\u002Fcard-800x500.png",{"path":764,"title":5,"description":728,"published":765,"category":725,"image":750,"draft":729},{"path":789,"title":790,"description":791,"published":792,"category":725,"image":793,"draft":729},"\u002Fblog\u002Fvibe-coded-app-security-checklist","La checklist di sicurezza del vibe coding, in nove controlli","Una checklist di sicurezza del vibe coding in nove voci, ognuna verificabile dall’esterno sulla tua app dal vivo, e ognuna con un test di una riga.","2026-09-20","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",{"path":795,"title":796,"description":797,"published":798,"category":725,"image":799,"draft":729},"\u002Fblog\u002Fstripe-secret-key-in-frontend","Una chiave segreta Stripe nel frontend può muovere denaro","Una chiave segreta Stripe esposta nel tuo frontend può rimborsare, addebitare e leggere ogni scheda cliente che hai. La tua chiave pk_live_ ci sta bene.","2026-09-19","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",{"path":801,"title":802,"description":803,"published":804,"category":725,"image":805,"draft":729},"\u002Fblog\u002Fvite-and-next-public-env-vars","Variabili d’ambiente Vite esposte: il prefisso vuol dire pubblica","Variabili d’ambiente Vite esposte: la tua app ha fatto ciò che il prefisso chiedeva. VITE_ e NEXT_PUBLIC_ vogliono dire pubblica, e l’IA non sapeva il costo.","2026-09-18","\u002Fblog\u002Fvite-and-next-public-env-vars\u002Fcard-800x500.png",{"path":807,"title":808,"description":809,"published":810,"category":725,"image":811,"draft":729},"\u002Fblog\u002Fbase44-source-maps","Sicurezza Base44: cosa segnala uno scan e cosa tocca a te sistemare","Sicurezza Base44 su 5.438 app scansionate: tre segnalazioni su quasi tutte sono della piattaforma, la source map è il badge di Base44, la tua parte è corta.","2026-09-17","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",{"path":813,"title":814,"description":815,"published":816,"category":725,"image":817,"draft":729},"\u002Fblog\u002Fis-cursor-ai-safe","Cursor AI è sicuro? L’editor, il codice e l’app che hai pubblicato","Cursor AI è sicuro? Tre domande in una ricerca: cosa tiene Cursor, cosa sbaglia il codice che scrive, e se l’app che hai pubblicato è aperta.","2026-09-16","\u002Fblog\u002Fis-cursor-ai-safe\u002Fcard-800x500.png",{"path":819,"title":820,"description":821,"published":822,"category":725,"image":823,"draft":729},"\u002Fblog\u002Fis-replit-safe","Replit è sicuro? Cosa abbiamo trovato in 3.042 app Replit online","Replit è sicuro? Abbiamo passato 3.042 app Replit online per nove controlli esterni. I rilievi stavano nell’app pubblicata, non nell’host.","2026-09-15","\u002Fblog\u002Fis-replit-safe\u002Fcard-800x500.png",{"path":825,"title":826,"description":827,"published":828,"category":779,"image":829,"draft":729},"\u002Fblog\u002Fsupabase-storage-backup","Supabase storage backup: la copia del database non ha nessun file","Un Supabase storage backup è un lavoro a parte. I backup del database tengono la lista dei tuoi file e nessuno dei file, quindi ogni upload resta rotto.","2026-09-14","\u002Fblog\u002Fsupabase-storage-backup\u002Fcard-800x500.png",{"path":831,"title":832,"description":833,"published":834,"category":779,"image":835,"draft":729},"\u002Fblog\u002Fsupabase-point-in-time-recovery","Point-in-time recovery di Supabase: prezzo e limiti","Il point-in-time recovery di Supabase riavvolge il database a qualsiasi secondo della settimana scorsa. $100 al mese oltre a Pro, e copre solo il database.","2026-09-13","\u002Fblog\u002Fsupabase-point-in-time-recovery\u002Fcard-800x500.png",{"path":837,"title":838,"description":839,"published":840,"category":779,"image":841,"draft":729},"\u002Fblog\u002Fsupabase-project-paused-recover","Progetto Supabase in pausa? I tuoi dati sono ancora lì","Supabase ha messo in pausa il tuo progetto dopo una settimana senza attività. Non è cancellato niente, Ripristina è accanto al nome e hai un anno di tempo.","2026-09-12","\u002Fblog\u002Fsupabase-project-paused-recover\u002Fcard-800x500.png",{"path":705,"title":843,"description":844,"published":845,"category":725,"image":846,"draft":729},"Qual è il builder di app con IA più sicuro? 30.998 app testate","Qual è il builder di app con IA più sicuro? Abbiamo scansionato 30.998 app online di Lovable, Base44, Replit, v0 e Bolt. Non è il builder a decidere il voto.","2026-09-11","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",{"path":379,"title":848,"description":849,"published":850,"category":725,"image":851,"draft":729},"Attiva Row Level Security su ogni tabella Supabase, poi verificalo","Attivare Row Level Security su Supabase senza una policy chiude del tutto la tabella. Una policy senza il flag non fa nulla. Ecco lo SQL, e la verifica.","2026-09-10","\u002Fblog\u002Fenable-rls-on-every-supabase-table\u002Fcard-800x500.png",{"path":853,"title":854,"description":855,"published":856,"category":725,"image":857,"draft":729},"\u002Fblog\u002Fsupabase-rls-disabled-in-public","Supabase \"RLS disabled in public\": cosa non vede l'avviso","Supabase segnala \"RLS disabled in public\" come errore. Non dice nulla della policy di lettura che lascia la tua tabella altrettanto aperta.","2026-09-09","\u002Fblog\u002Fsupabase-rls-disabled-in-public\u002Fcard-800x500.png",{"path":553,"title":859,"description":860,"published":861,"category":725,"image":862,"draft":729},"Come ruotare una chiave service_role Supabase trapelata","Supabase dice di chiudere prima la falla. Altre guide dicono di ruotare subito. Quale sia giusto dipende da dove è finita la tua chiave service_role.","2026-09-08","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fcard-800x500.png",{"path":864,"title":865,"description":866,"published":867,"category":725,"image":868,"draft":729},"\u002Fblog\u002Fvibe-coding-security-scanners-compared","Scanner di sicurezza per vibe coding a confronto, il nostro incluso","Il miglior scanner di sicurezza per vibe coding dipende da tre domande che nessun elenco di funzioni affronta. Dieci strumenti a confronto, con i prezzi.","2026-09-07","\u002Fblog\u002Fvibe-coding-security-scanners-compared\u002Fcard-800x500.png",{"path":870,"title":871,"description":872,"published":873,"category":725,"image":874,"draft":729},"\u002Fblog\u002Fsupabase-security-checker","Supabase security checker: i cinque controlli da fare da soli","Un Supabase security checker legge la tua app pubblicata invece delle impostazioni del progetto. Ecco i cinque controlli che esegue e come farli da solo.","2026-09-06","\u002Fblog\u002Fsupabase-security-checker\u002Fcard-800x500.png",{"path":876,"title":877,"description":878,"published":879,"category":725,"image":880,"draft":729},"\u002Fblog\u002Fvibe-coding-security-scanner","Scanner di sicurezza per vibe coding: cosa si perde","Uno scanner di sicurezza per vibe coding legge la tua app dal vivo, da fuori. Cosa copre, le quattro cose che non può vedere e come leggere il risultato.","2026-09-05","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",{"path":237,"title":882,"description":883,"published":884,"category":725,"image":885,"draft":729},"Intestazioni di sicurezza mancanti: quando contano","Le intestazioni di sicurezza mancanti sono il rilievo che il nostro scanner stampa più spesso. Da cosa proteggono e quando sono la riga meno urgente.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":887,"title":888,"description":889,"published":890,"category":725,"image":891,"draft":729},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","La tua chiave API OpenAI è esposta nel frontend. Ruotala.","Una chiave API OpenAI esposta nel frontend non si può legare a nessun dominio. Ruotala oggi, sposta la chiamata sul tuo server e metti un tetto di spesa.","2026-09-03","\u002Fblog\u002Fopenai-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":893,"title":894,"description":895,"published":896,"category":725,"image":897,"draft":729},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","Chiave API esposta nel frontend: cosa spediscono 30.998 app","Una chiave API esposta nel tuo frontend è quasi sempre una chiave di Google Maps. Abbiamo scansionato 30.998 app vibe-coded e contato cosa esce davvero.","2026-09-02","\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps\u002Fcard-800x500.png",{"path":899,"title":900,"description":901,"published":902,"category":779,"image":903,"draft":729},"\u002Fblog\u002Fsupabase-backup-tools-compared","Strumenti di backup Supabase a confronto, il nostro incluso","Quattro tipi di strumento di backup Supabase, cosa copia davvero ognuno, e il caso in cui una GitHub Action gratuita batte il pagare chiunque, noi inclusi.","2026-09-01","\u002Fblog\u002Fsupabase-backup-tools-compared\u002Fcard-800x500.png",{"path":905,"title":906,"description":907,"published":908,"category":725,"image":909,"draft":729},"\u002Fblog\u002Freplit-secrets-explained","Come usare i secret su Replit, e cosa viene comunque pubblicato","Come usare i secret su Replit: aggiungerne uno, rileggerlo e risolvere le due cause dell'undefined. E le chiavi che lo strumento non riesce a proteggere.","2026-08-31","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",{"path":911,"title":912,"description":913,"published":914,"category":779,"image":915,"draft":729},"\u002Fblog\u002Fback-up-supabase-free-tier","Backup del piano gratuito Supabase: farne uno senza terminale","Sul piano gratuito Supabase non esistono backup: la copia la fai tu. Come farne uno dalla dashboard e che cosa si lascia dietro la via del CSV.","2026-08-30","\u002Fblog\u002Fback-up-supabase-free-tier\u002Fcard-800x500.png",{"path":917,"title":918,"description":919,"published":920,"category":725,"image":921,"draft":729},"\u002Fblog\u002Fis-supabase-secure","Supabase è sicuro? Sì. Il tuo progetto è un'altra questione","Supabase è sicuro? La piattaforma è certificata, cifrata e sottoposta a pentest. La loro documentazione dice dove finisce quello e iniziano le tue impostazioni.","2026-08-29","\u002Fblog\u002Fis-supabase-secure\u002Fcard-800x500.png",{"path":923,"title":924,"description":925,"published":926,"category":725,"image":927,"draft":729},"\u002Fblog\u002Fwhere-to-find-supabase-api-keys","Dove trovare le chiavi API di Supabase: anon, service_role e URL","L'URL del progetto, la chiave anon e la chiave service_role stanno su una pagina della dashboard. Ecco dove si trova e quale dei quattro va nella tua app.","2026-08-28","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fcard-800x500.png",{"path":929,"title":930,"description":931,"published":932,"category":725,"image":933,"draft":729},"\u002Fblog\u002Fnew-row-violates-row-level-security-policy","New row violates row-level security policy su Supabase. E adesso?","\"New row violates row-level security policy\" significa che Supabase ha rifiutato una scrittura. La soluzione veloce riapre la tabella a chiunque.","2026-08-27","\u002Fblog\u002Fnew-row-violates-row-level-security-policy\u002Fcard-800x500.png",{"path":272,"title":935,"description":936,"published":937,"category":725,"image":938,"draft":729},"Un wildcard CORS è un rischio di sicurezza? Quasi mai.","Un wildcard CORS è un rischio di sicurezza? Di solito è il valore predefinito del tuo builder e non consegna nulla che il tuo server non desse già a chiunque.","2026-08-26","\u002Fblog\u002Fcors-wildcard-security-risk\u002Fcard-800x500.png",{"path":940,"title":941,"description":942,"published":943,"category":779,"image":944,"draft":729},"\u002Fblog\u002Fsupabase-branching-is-not-a-backup","Il branching di Supabase non è un backup. Va solo in avanti.","Perché il branching di Supabase non è un backup: un branch parte senza i tuoi dati e un merge sposta solo lo schema. A cosa serve davvero e cosa usare invece.","2026-08-25","\u002Fblog\u002Fsupabase-branching-is-not-a-backup\u002Fcard-800x500.png",{"path":946,"title":947,"description":948,"published":949,"category":779,"image":950,"draft":729},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","Come ripristinare un backup Supabase, e cosa si rompe dopo","Come ripristinare un backup Supabase dalla dashboard o da un file di dump, che cosa sostituisce il ripristino e perché la tua app può restare rotta lo stesso.","2026-08-24","\u002Fblog\u002Fhow-to-restore-a-supabase-backup\u002Fcard-800x500.png",{"path":574,"title":952,"description":953,"published":954,"category":725,"image":955,"draft":729},"Il tuo bucket Supabase Storage è pubblico. È un problema?","Un bucket Supabase Storage pubblico significa che chi ha l'URL di un file può aprirlo. Non significa che qualcuno possa elencare quello che c'è dentro.","2026-08-23","\u002Fblog\u002Fsupabase-storage-bucket-public\u002Fcard-800x500.png",{"path":539,"title":957,"description":958,"published":959,"category":725,"image":960,"draft":729},"Una chiave API Google nel frontend è un problema?","Una chiave API Google esposta nel frontend è la chiave che il nostro scanner trova più spesso, e di solito va bene così. Lo decide una impostazione gratuita.","2026-08-22","\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":669,"title":962,"description":963,"published":964,"category":779,"image":965,"draft":729},"Un agente IA ha cancellato i miei dati Supabase. Cosa recupero?","Un agente IA ha cancellato dati dal tuo database. Quello che puoi recuperare era già deciso prima che partisse, e i prossimi minuti decidono il resto.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":629,"title":967,"description":968,"published":969,"category":725,"image":970,"draft":729},"Chiunque può leggere il tuo database Supabase? 3.680 app testate","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ì.","2026-08-18","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",{"path":262,"title":972,"description":973,"published":969,"category":725,"image":974,"draft":729},"Source map esposte: la tua app sta pubblicando il codice originale","Una source map esposta permette a chiunque di leggere il codice originale della tua app, commenti inclusi. Il controllo da 30 secondi e cosa conta davvero.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":976,"title":977,"description":978,"published":979,"category":725,"image":980,"draft":729},"\u002Fblog\u002Fsupabase-new-api-keys","Le nuove chiavi API di Supabase: quale va nella tua app?","Supabase ha sostituito anon e service_role con chiavi pubblicabili e segrete. Quale sta bene nella tua app, e quale non deve starci mai?","2026-08-12","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",{"path":982,"title":983,"description":984,"published":985,"category":779,"image":986,"draft":729},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","Supabase fa il backup del mio database? Dipende dal tuo piano.","Supabase fa il backup del tuo database? Ogni giorno sui piani a pagamento, mai su quello gratuito. Come capire cosa hai e cosa quella copia non copre.","2026-08-11","\u002Fblog\u002Fdoes-supabase-back-up-my-database\u002Fcard-800x500.png",{"path":405,"title":988,"description":989,"published":990,"category":725,"image":991,"draft":729},"Supabase Row Level Security è attivo. La tabella resta pubblica.","Attivare Supabase Row Level Security non protegge una tabella. Lo fanno le policy, e quella che ha rimesso in piedi la tua app può far entrare chiunque.","2026-08-10","\u002Fblog\u002Fsupabase-rls-on-but-table-still-public\u002Fcard-800x500.png",{"path":993,"title":994,"description":995,"published":990,"category":779,"image":996,"draft":729},"\u002Fblog\u002Fversion-history-is-not-a-backup","La cronologia delle versioni non è un backup dei tuoi dati.","Lovable e Bolt tengono una cronologia delle versioni del codice. Il tuo database è un servizio a parte, e tornare indietro non ti restituisce i dati.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Fcard-800x500.png",{"path":998,"title":999,"description":1000,"published":1001,"category":779,"image":1002,"draft":729},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","Tre modi per fare il backup di un database Supabase, e cosa manca","Il pannello, pg_dump e un servizio gestito. Che cosa salva davvero ciascuno, cosa lascia fuori senza dirlo e quale sopravvive alla perdita dell'account.","2026-08-09","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Fcard-800x500.png",{"path":560,"title":1004,"description":1005,"published":1001,"category":725,"image":1006,"draft":729},"Quali chiavi API sono sicure nel browser e quali no","La tua chiave anon di Supabase è fatta per essere pubblica. La chiave service_role no, e ignora ogni regola che imposti. Come distinguerle.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1790150956018]