[{"data":1,"prerenderedAt":870},["ShallowReactive",2],{"blog-it-vibe-coded-app-security-checklist":3,"blog-index-it":636},{"id":4,"title":5,"body":6,"category":588,"cover":589,"coverAlt":590,"description":591,"draft":592,"extension":593,"faq":594,"image":613,"keywords":614,"meta":624,"navigation":625,"ogTitle":626,"path":627,"published":628,"seo":629,"stem":630,"tldr":631,"updated":628,"__hash__":635},"blog_it\u002Fblog\u002Fvibe-coded-app-security-checklist.md","La checklist di sicurezza del vibe coding, in nove controlli",{"type":7,"value":8,"toc":565},"minimark",[9,13,21,24,27,32,35,41,185,194,198,201,209,214,226,242,260,264,272,275,288,292,301,312,320,324,327,335,343,347,350,353,357,360,363,371,375,378,381,389,393,396,399,407,411,414,417,421,424,427,432,436,439,442,450,466,469,473,476,479,485,489,492,495,505,512,516,552],[10,11,12],"p",{},"Stai per mandare a qualcuno l’indirizzo della tua app, e una vocina ti dice che\nprima dovresti controllare. Così cerchi una checklist di sicurezza del vibe\ncoding e ne trovi una da venticinque voci, scritta da una persona che dà per\nscontato che tu sappia già cos’è una Content Security Policy.",[10,14,15,16,20],{},"Ecco la parte che lista dopo lista sbaglia: ",[17,18,19],"strong",{},"quasi niente di quello che c’è\ndentro si può controllare."," «Usa password forti» è un consiglio. «Ripulisci il\ncodice morto» è ordine. «Segui il principio del privilegio minimo» è una frase.\nNessuna ha un test, quindi nessuna si può finire, e una lista che non puoi\nfinire è una preoccupazione con dei numeri sopra.",[10,22,23],{},"Questa ha nove voci. Nove è il numero di cose che chiunque può verificare\ndall’esterno su un’app dal vivo, senza la tua password, senza il tuo repository\ne senza il tuo account Supabase. Ognuna ha un test che puoi fare da solo e ogni\ntest torna con un sì o con un no.",[10,25,26],{},"Pensala come il giro che un pilota fa attorno a un aereo prima di un volo. È\ncorto, tutto quello che ci sta dentro si vede dalla pista, e non sostituisce\nniente del libretto di manutenzione. L’ultima sezione di questo articolo parla\ndel libretto.",[28,29,31],"h2",{"id":30},"cosa-deve-esserci-in-una-checklist-di-sicurezza-del-vibe-coding","Cosa deve esserci in una checklist di sicurezza del vibe coding?",[10,33,34],{},"Nove domande, e sono le nove che un estraneo potrebbe fare alla tua app questo\npomeriggio, che tu abbia controllato o no.",[36,37],"diagram",{"alt":38,"caption":39,"src":40},"Il marchio Reeve sopra una fila di nove icone a contorno: una chiave, un cilindro di database, un documento, un lucchetto, una scatola con coperchio, una coppia di parentesi di codice, un globo, una coccarda di certificato e un calendario.","I nove, nell’ordine in cui le sezioni qui sotto li percorrono. Ognuno si legge dall’esterno, ed è questo che li rende tutti verificabili.","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fnine-checks-1600x420.png",[42,43,44,60],"table",{},[45,46,47],"thead",{},[48,49,50,54,57],"tr",{},[51,52,53],"th",{},"Il controllo",[51,55,56],{},"Il test che puoi fare tu",[51,58,59],{},"Cosa vuol dire se torna sbagliato",[61,62,63,89,100,119,130,141,152,163,174],"tbody",{},[48,64,65,69,86],{},[66,67,68],"td",{},"Chiavi segrete nel tuo codice",[66,70,71,72,76,77,76,80,76,83],{},"Cerca nel progetto ",[73,74,75],"code",{},"sk_",", ",[73,78,79],{},"sb_secret_",[73,81,82],{},"service_role",[73,84,85],{},"AKIA",[66,87,88],{},"Chi la trova può spendere i tuoi soldi o leggere ogni riga",[48,90,91,94,97],{},[66,92,93],{},"Regole del database",[66,95,96],{},"Supabase, poi il Security Advisor",[66,98,99],{},"Chiunque abbia la tua chiave pubblica può leggere quelle righe",[48,101,102,105,116],{},[66,103,104],{},"File privati",[66,106,107,108,111,112,115],{},"Apri ",[73,109,110],{},"\u002F.env"," e ",[73,113,114],{},"\u002F.git\u002Fconfig"," in una finestra privata",[66,117,118],{},"Ogni chiave che credevi sul server è scaricabile",[48,120,121,124,127],{},[66,122,123],{},"Bucket di storage",[66,125,126],{},"Supabase, poi Storage, poi la colonna Public e le policy",[66,128,129],{},"Un estraneo ottiene l’elenco di ciò che i tuoi utenti hanno messo",[48,131,132,135,138],{},[66,133,134],{},"Header di sicurezza",[66,136,137],{},"Una scansione; questo non ha una versione dalla barra degli indirizzi",[66,139,140],{},"I tuoi visitatori sono più facili da attaccare tramite la pagina",[48,142,143,146,149],{},[66,144,145],{},"Source map pubblicate",[66,147,148],{},"Strumenti di sviluppo, Sources, cerca i tuoi nomi di file",[66,150,151],{},"Il tuo codice originale è leggibile, commenti compresi",[48,153,154,157,160],{},[66,155,156],{},"I tuoi indirizzi API",[66,158,159],{},"Aprine uno in una finestra privata senza essere collegato",[66,161,162],{},"Quello che restituisce è pubblico",[48,164,165,168,171],{},[66,166,167],{},"Scadenza del certificato",[66,169,170],{},"Clicca il lucchetto, apri il certificato, leggi «Valido fino al»",[66,172,173],{},"I visitatori trovano un avviso del browser a tutta pagina",[48,175,176,179,182],{},[66,177,178],{},"Rinnovo del dominio",[66,180,181],{},"La data di scadenza dal tuo registrar, e se il rinnovo automatico è attivo",[66,183,184],{},"L’app sparisce e il nome finisce in vendita",[10,186,187,188,193],{},"Il nostro ",[189,190,192],"a",{"href":191},"\u002Fsecurity-scanner","scanner di sicurezza gratuito"," fa tutti e nove su\nqualsiasi URL dal vivo in circa 20 secondi e senza account, ed è la via più\nrapida per il primo giro. Legge, non si collega mai e non scrive mai niente.\nOgni voce qui sotto resta qualcosa che puoi controllare a mano, e i test sono\nscritti per intero così che tu possa mettere una riga del nostro rapporto\naccanto al tuo pannello.",[28,195,197],{"id":196},"i-quattro-da-fare-prima-di-condividere-lindirizzo","I quattro da fare prima di condividere l’indirizzo",[10,199,200],{},"Chiavi segrete, regole del database, file privati e bucket di storage. In questi\nquattro quello che resta esposto sono i tuoi dati o i tuoi soldi, e tutti e\nquattro tocca a te sistemarli e non alla tua piattaforma di hosting.",[10,202,203,204,208],{},"Tre di loro sono gli unici controlli dell’intero gruppo che possono segnalare un\nrisultato critico, e il quarto è quello in cui a restare esposto è ciò che i\ntuoi utenti hanno caricato. Tra il 12 e il 14 agosto 2026 abbiamo passato tutti\ne nove i controlli su\n",[189,205,207],{"href":206},"\u002Fresearch\u002Fvibe-coded-app-security-2026","30.998 app di vibe coding dal vivo",", e\nle cifre di ogni sezione qui sotto vengono da quel giro.",[210,211,213],"h3",{"id":212},"_1-cè-una-chiave-segreta-nel-codice-che-la-tua-app-manda","1. C’è una chiave segreta nel codice che la tua app manda?",[10,215,216,217,76,219,76,221,111,223,225],{},"Cerca in tutto il tuo progetto ",[73,218,75],{},[73,220,79],{},[73,222,82],{},[73,224,85],{},". Una\ncorrispondenza dentro qualsiasi cosa che il browser scarica è il risultato.",[10,227,228,229,232,233,236,237,241],{},"Tutto quello che serve alla tua app per girare in un browser arriva in quel\nbrowser, quindi arriva anche una chiave che ci sta dentro. Alcune chiavi ci\nstanno di diritto: una chiave Supabase ",[73,230,231],{},"anon"," o ",[73,234,235],{},"sb_publishable_"," è un indirizzo\ne non un permesso, e trovarla è corretto.\n",[189,238,240],{"href":239},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Quali chiavi sono sicure in un frontend e quali no","\nè quella distinzione per intero.",[10,243,244,245,247,248,250,251,254,255,259],{},"Una chiave segreta è l’altro tipo. Una chiave Supabase ",[73,246,79],{}," o\n",[73,249,82],{}," ignora ogni regola di tabella che tu abbia mai scritto. Una\nchiave Stripe ",[73,252,253],{},"sk_live_"," sposta soldi. Abbiamo trovato una chiave di quella\nclasse su 52 app su 30.998, il che è raro ed è la cosa peggiore di questa lista\nquando capita. Se la tua è una di quelle,\n",[189,256,258],{"href":257},"\u002Fblog\u002Frotate-supabase-service-role-key","ruotala prima di fare qualsiasi altra cosa",":\ncancellare la chiave dal codice lascia il vecchio valore in funzione.",[210,261,263],{"id":262},"_2-un-estraneo-può-leggere-il-tuo-database","2. Un estraneo può leggere il tuo database?",[10,265,266,267,271],{},"In Supabase, apri il Security Advisor. Ogni voce che dice che una tabella è\npubblica ma la sicurezza per righe non è attiva è una tabella che risponde a\nchiunque chieda, e\n",[189,268,270],{"href":269},"\u002Fblog\u002Fsupabase-rls-disabled-in-public","proprio quell’avviso"," ha un articolo\ntutto suo.",[10,273,274],{},"Row Level Security è la regola che decide, riga per riga, chi può vedere cosa.\nSenza di lei, la chiave pubblica che sta nella tua app basta per leggere la\ntabella, e quella chiave sta nel browser di ogni visitatore per progetto.",[10,276,277,278,282,283,287],{},"È il risultato serio più comune dell’intero gruppo: 2.096 delle 3.680 app il cui\nprogetto Supabase ci ha risposto, cioè il 57 %, avevano almeno una tabella che\nconsegnava righe a una richiesta senza nessuno collegato.\n",[189,279,281],{"href":280},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","Attivarla su ogni tabella"," è la\nriparazione. L’advisor legge le tue impostazioni e non le risposte del tuo\ndatabase, quindi chiudi controllando dall’esterno: una tabella può avere\nl’impostazione attiva e una policy che\n",[189,284,286],{"href":285},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","lascia passare tutti lo stesso",".",[210,289,291],{"id":290},"_3-chiunque-può-scaricare-i-tuoi-file-privati","3. Chiunque può scaricare i tuoi file privati?",[10,293,107,294,111,297,300],{},[73,295,296],{},"tuaapp.com\u002F.env",[73,298,299],{},"tuaapp.com\u002F.git\u002Fconfig"," in una finestra privata.\nEntrambi dovrebbero rifiutarsi di aprirsi.",[10,302,303,304,307,308,311],{},"Un file ",[73,305,306],{},".env"," è ogni chiave che credevi al sicuro sul server, in un elenco\nsemplice, a un indirizzo indovinabile. Una cartella ",[73,309,310],{},".git"," è la storia del tuo\nprogetto. Nessuno dei due è fatto per essere servito, e ogni tanto lo sono lo\nstesso, di solito perché una build ha copiato una cartella che non doveva.",[10,313,314,315,319],{},"È la cosa più rara che troviamo: 8 app su 30.749. Sono anche cinque secondi di\nlavoro per escluderla, ed è\n",[189,316,318],{"href":317},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","da lì che arrivano le fughe più dannose","\nquando capita.",[210,321,323],{"id":322},"_4-i-tuoi-bucket-di-storage-elencano-cosa-contengono","4. I tuoi bucket di storage elencano cosa contengono?",[10,325,326],{},"In Supabase, apri Storage. Leggi la colonna Public su ogni bucket, poi apri le\npolicy di ogni bucket che contiene qualcosa non destinato a tutti.",[10,328,329,330,334],{},"Qui succedono due cose diverse ed è facile confonderle. Un bucket pubblico serve\nqualsiasi file di cui qualcuno conosce già il nome. Un bucket ",[331,332,333],"em",{},"elencabile","\nconsegna i nomi, e questo trasforma «qualcuno dovrebbe indovinare» in una\ndirectory dei caricamenti dei tuoi utenti. Il nostro controllo testa il secondo,\nperché è quello che cambia cosa un estraneo può fare davvero.",[10,336,337,338,342],{},"792 app su 27.269 avevano un bucket che si è elencato davanti a noi senza\ncollegarsi. ",[189,339,341],{"href":340},"\u002Fblog\u002Fsupabase-storage-bucket-public","Cosa ottiene un estraneo da quell’elenco","\nè la versione lunga, e la riparazione è di solito un interruttore più una\npolicy.",[28,344,346],{"id":345},"i-cinque-che-possono-aspettare-di-avere-utenti","I cinque che possono aspettare di avere utenti",[10,348,349],{},"Header, source map, i tuoi indirizzi API, il certificato e il dominio. Tre di\nquesti li imposta di solito chi ospita la tua app, e due sono date su un\ncalendario.",[10,351,352],{},"Nessuno di loro da solo consegna una riga del tuo database, ed è per questo che\nstanno nel secondo gruppo. Uno dei cinque vale la pena di anticiparlo se la tua\napp ha un backend suo, ed è segnalato qui sotto.",[210,354,356],{"id":355},"_5-gli-header-di-sicurezza-del-browser-sono-attivi","5. Gli header di sicurezza del browser sono attivi?",[10,358,359],{},"È l’unica voce della lista senza una versione che puoi fare dalla barra degli\nindirizzi. Una scansione li legge, oppure apri gli strumenti di sviluppo del\nbrowser, vai alla scheda Rete, clicchi la prima richiesta e leggi gli header\ndella risposta.",[10,361,362],{},"Sono piccole istruzioni al browser: carica questa pagina solo via HTTPS,\nrifiutati di farti incorniciare da un altro sito, non indovinare i tipi di file.\nLa loro assenza non espone niente di per sé. Toglie protezioni che rendono altri\nattacchi più difficili.",[10,364,365,366,370],{},"Quasi nessuno passa questa voce e quasi nessuno può. A 30.756 app su 30.981 ne\nmancava almeno uno, e su un sottodominio di un builder l’impostazione è della\npiattaforma. ",[189,367,369],{"href":368},"\u002Fblog\u002Fmissing-security-headers","Se puoi fare qualcosa sui tuoi","\ndipende interamente da dove è ospitata la tua app.",[210,372,374],{"id":373},"_6-il-tuo-codice-sorgente-originale-è-pubblicato","6. Il tuo codice sorgente originale è pubblicato?",[10,376,377],{},"Apri la tua app dal vivo, apri gli strumenti di sviluppo del browser e guarda il\npannello Sources. Se i tuoi file compaiono lì con il codice che hai scritto e i\ncommenti che hai lasciato, le source map sono uscite con la build.",[10,379,380],{},"Una source map è una tabella di traduzione che riporta il file compresso che la\ntua app spedisce a codice leggibile. Gli sviluppatori la usano per fare il\ndebug di un sito dal vivo. Pubblicata su internet, vuol dire che chiunque può\nleggere la tua app come l’hai scritta.",[10,382,383,384,388],{},"3.885 app su 30.987 hanno pubblicato le loro. Non è una fuga di per sé, e lo\ndiventa quando il codice contiene qualcosa che davi per scontato nessuno avrebbe\nletto. ",[189,385,387],{"href":386},"\u002Fblog\u002Fsource-maps-exposed-in-production","Cosa espone una source map pubblicata","\ncopre la differenza e l’impostazione di build che la spegne.",[210,390,392],{"id":391},"_7-i-tuoi-indirizzi-api-rispondono-a-un-estraneo","7. I tuoi indirizzi API rispondono a un estraneo?",[10,394,395],{},"Copia uno degli indirizzi API della tua app dalla scheda Rete, poi aprilo in una\nfinestra privata dove non sei collegato. Guarda cosa torna.",[10,397,398],{},"È la voce da anticipare se la tua app ha un backend suo, perché tutto quello che\nun indirizzo consegna a una richiesta senza login è pubblico, comunque sia fatta\nla pagina che gli sta davanti. 3.852 app su 30.926 ne avevano almeno uno.",[10,400,401,402,406],{},"L’impostazione imparentata è CORS, che decide quali altri siti web possono\nchiamare la tua app dal browser di un visitatore. Un carattere jolly lì va spesso\nbenissimo e ogni tanto no, e\n",[189,403,405],{"href":404},"\u002Fblog\u002Fcors-wildcard-security-risk","quale dei due hai"," vale la pena leggerlo\nprima di cambiare qualcosa.",[210,408,410],{"id":409},"_8-il-tuo-certificato-sta-per-scadere","8. Il tuo certificato sta per scadere?",[10,412,413],{},"Clicca il lucchetto nella barra degli indirizzi, apri il certificato e leggi la\ndata di «Valido fino al».",[10,415,416],{},"Quasi ogni hosting li rinnova da solo e quasi ognuno di loro ci riesce. 32 app\nsu 30.851 avevano un certificato scaduto, in scadenza o non affidabile. Quando\nfallisce, i visitatori ricevono un avviso del browser a tutta pagina che dice\nloro che il tuo sito non è sicuro, e la maggior parte se ne va.",[210,418,420],{"id":419},"_9-il-tuo-dominio-è-rinnovato","9. Il tuo dominio è rinnovato?",[10,422,423],{},"Entra dal tuo registrar, leggi la data di scadenza e controlla che il rinnovo\nautomatico sia attivo e che la carta dietro non sia scaduta.",[10,425,426],{},"È la voce meno tecnica della lista e l’unica che può togliere la tua app da\ninternet del tutto. 55 app su 30.980 avevano un dominio scaduto o in scadenza.\nUn nome lasciato scadere può anche essere registrato da qualcun altro, insieme a\nogni link che qualcuno ci abbia mai puntato.",[36,428],{"alt":429,"caption":430,"src":431},"Le stesse nove icone dei controlli in due colonne. A sinistra sono ordinate per quanto spesso una scansione trova ciascuna; a destra nell’ordine in cui questo articolo le percorre. Linee curve collegano ogni icona a se stessa e si incrociano al centro, quattro di esse in colore accento.","A sinistra: quanto spesso abbiamo trovato ciascuna su 30.998 app. A destra: l’ordine di questa lista. I due non coincidono, ed è per questo che il risultato più comune su internet non è la prima cosa da fare.","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Ftwo-orders-of-nine-1600x790.png",[28,433,435],{"id":434},"cosa-portano-le-altre-checklist-che-non-è-un-controllo-di-sicurezza","Cosa portano le altre checklist che non è un controllo di sicurezza",[10,437,438],{},"Backup, monitoraggio degli errori, codice morto e consigli sulle password. Il\nprimo è quello che più probabilmente ti costerà qualcosa, e non è un controllo\ndi sicurezza, perché niente fuori dalla tua app può dire se ne hai uno.",[10,440,441],{},"È il motivo onesto per cui manca tra i nove. Uno scanner legge il tuo sito dal\nvivo; un backup è una copia del tuo database che sta altrove, e nessuno sguardo\ndall’esterno sulla tua app può dire se esiste, se è aggiornata o se si\nripristinerebbe. Sta comunque nella tua lista. Sta nel tipo di lista che si\ntiene, non in quello che si percorre.",[10,443,444,445,449],{},"I backup di Supabase dipendono dal tuo piano e restano dentro al tuo account\nSupabase, il che va benissimo finché il problema non è l’account.\n",[189,446,448],{"href":447},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","Le tre strade verso una copia che è tua","\nespone cosa copre ciascuna.",[10,451,452,453,457,458,461,462,287],{},"Se preferisci che succeda senza di te, è quello che fa\n",[189,454,456],{"href":455},"\u002Fpricing","Reeve Care",". Prende una copia del tuo database Supabase con la\ncadenza fissata dal piano che hai, ogni notte sul livello d’ingresso e fino a\nquattro volte al giorno su quello più alto, rilegge ogni copia prima che conti\ncome backup, e la mette dove Supabase non arriva. Quanto indietro puoi tornare\nlo fissa lo stesso piano. Ripristinare è un pulsante, e prende un’istantanea\ndello stato attuale prima di partire, così premerlo nel panico non può\ndistruggere quello che stavi cercando di salvare. Arrivano anche i file\ncaricati, appena colleghi una credenziale Storage, che viene chiesta a parte\nperché è l’unica chiave che teniamo capace di scrivere: Supabase non rilascia\nuna chiave di sola lettura per i file. Care parte da €49 al mese per un’app, ed\nè un prezzo di listino, quindi la ",[189,459,460],{"href":455},"pagina dei prezzi"," è a volte sotto\nla cifra qui e mai sopra. Come una copia viene presa, controllata e rimessa a\nposto è disegnato passo per passo sulla\n",[189,463,465],{"href":464},"\u002Fsupabase-backups","pagina dei backup Supabase",[10,467,468],{},"Il resto di quello che portano quelle liste è lavoro vero e non questo lavoro.\nIl monitoraggio degli errori ti dice quando la tua app si rompe, e quella è\ngestione. «Togli le dipendenze inutilizzate» è ordine. «Usa password forti» vale\nper tutto quello a cui ti sei mai collegato.",[28,470,472],{"id":471},"ogni-quanto-devo-rifare-tutto-questo","Ogni quanto devo rifare tutto questo?",[10,474,475],{},"Dopo ogni deploy che ha toccato le regole del database, le chiavi o le\nimpostazioni di build. Se suona come la maggior parte dei deploy, di solito lo\nè, e lì sta il vero problema di una checklist che si percorre una volta sola.",[10,477,478],{},"Il giro attorno all’aereo si fa prima di ogni volo proprio per questo. Row Level\nSecurity viene spenta a mezzanotte per far caricare una pagina e nessuno la\nriaccende. Una chiave viene incollata nel frontend per far uscire una funzione\nprima di una demo. Un bucket viene aperto per un caricamento e resta aperto.\nOgnuna di queste cose è un martedì normale, e ognuna basta a trasformare un\nrisultato pulito in uno serio.",[10,480,481,484],{},[189,482,483],{"href":455},"Reeve Monitor"," esiste per quel buco. Ripassa tutti e nove i controlli\nogni ora su un massimo di tre app, guarda ogni 60 secondi se l’app risponde, ti\navvisa il giorno in cui un risultato cambia invece di aspettare che tu guardi, e\nmanda un rapporto mensile in lingua semplice. Costa €12 al mese di listino, con\nsette giorni gratis prima che addebiti, e la pagina dei prezzi è a volte sotto\nla cifra qui e mai sopra. Monitor sorveglia e nient’altro. I backup sono il\npiano Care sopra di lui, e Care tiene una copia di un database Supabase e di\nnient’altro.",[28,486,488],{"id":487},"cosa-non-dimostra-niente-di-tutto-questo","Cosa non dimostra niente di tutto questo",[10,490,491],{},"Che la tua app è sicura. Nove controlli che tornano puliti vogliono dire che\nnove domande poste dall’esterno sono tornate pulite il giorno in cui le hai\nposte.",[10,493,494],{},"Quattro cose restano invisibili a ogni voce di questa lista, perché nessuna\nlascia mai il tuo server. Il tuo codice server, comprese le funzioni di database\ne le edge function che nessuno da fuori può leggere. Le variabili d’ambiente che\nhai tenuto fuori dal browser, che è esattamente il loro posto e anche il motivo\nper cui una scansione non può confermare che siano conservate bene. La tua\nstoria delle versioni, dove una chiave che hai committato a marzo e tolto ad\naprile è ancora seduta. E la logica della tua app, per esempio se un utente\ncollegato può aprire l’ordine di un altro cambiando un numero nell’indirizzo.",[496,497,499],"callout",{"type":498},"warn",[10,500,501,504],{},[17,502,503],{},"Un controllo esterno automatico non è un audit."," L’assenza di un risultato\nnon è una garanzia, e niente in questa pagina è un verdetto sulla tua app nel\nsuo insieme. Se la tua app incassa pagamenti o tiene dati sanitari o finanziari\ndi qualcuno, un penetration test fatto da una persona è un altro esercizio e col\ntempo quello giusto.",[10,506,507,511],{},[189,508,510],{"href":509},"\u002Fblog\u002Fvibe-coding-security-scanner","Cosa una scansione per URL può vedere e cosa no","\npercorre quel confine per bene, comprese le tre strumentazioni che leggono cose\ndiverse e il punto in cui ognuna è cieca.",[28,513,515],{"id":514},"cosa-fare-adesso","Cosa fare adesso",[517,518,519],"key-takeaways",{},[520,521,522,540,543,546,549],"ul",{},[523,524,525,526,76,528,76,530,111,532,534,535,111,537,539],"li",{},"Fai i quattro urgenti in ordine: cerca nel tuo progetto ",[73,527,75],{},[73,529,79],{},[73,531,82],{},[73,533,85],{},"; apri il Security Advisor in Supabase; apri ",[73,536,110],{},[73,538,114],{}," in una finestra privata; leggi la colonna Public e le policy in Storage.",[523,541,542],{},"Se trovi una chiave segreta, ruotala prima di toglierla. Cancellare la chiave dal codice lascia il vecchio valore in funzione, ed è ancora nella tua storia delle versioni e in qualsiasi copia in cache del tuo sito.",[523,544,545],{},"Fai i cinque restanti quando non c’è niente che brucia. Tre sono del tuo hosting, e le due date vanno sul tuo calendario.",[523,547,548],{},"Metti un backup dove il tuo account Supabase non può cancellarlo, poi ripristinalo una volta per sapere che funziona.",[523,550,551],{},"Rifai tutta la lista dopo ogni deploy che ha toccato il database, le chiavi o le impostazioni di build.",[10,553,554,555,559,560,564],{},"Se la tua app tiene i suoi dati in Supabase, la versione scritta attorno a\nquell’unico stack è la ",[189,556,558],{"href":557},"\u002Fis-your-supabase-app-safe","guida alle app Supabase",". E\nse preferisci qualcosa da spuntare invece che da leggere, la\n",[189,561,563],{"href":562},"\u002Fchecklist","checklist di sicurezza in 10 minuti"," è quella interattiva.",{"title":566,"searchDepth":567,"depth":567,"links":568},"",3,[569,571,577,584,585,586,587],{"id":30,"depth":570,"text":31},2,{"id":196,"depth":570,"text":197,"children":572},[573,574,575,576],{"id":212,"depth":567,"text":213},{"id":262,"depth":567,"text":263},{"id":290,"depth":567,"text":291},{"id":322,"depth":567,"text":323},{"id":345,"depth":570,"text":346,"children":578},[579,580,581,582,583],{"id":355,"depth":567,"text":356},{"id":373,"depth":567,"text":374},{"id":391,"depth":567,"text":392},{"id":409,"depth":567,"text":410},{"id":419,"depth":567,"text":420},{"id":434,"depth":570,"text":435},{"id":471,"depth":570,"text":472},{"id":487,"depth":570,"text":488},{"id":514,"depth":570,"text":515},"Basi della sicurezza","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcover-1200x630.png","Un elenco di nove righe rigate, ognuna con una casella vuota accanto, nessuna ancora spuntata.","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.",false,"md",[595,598,601,604,607,610],{"q":596,"a":597},"Cosa devo controllare prima di lanciare un’app fatta in vibe coding?","Quattro cose, in questo ordine: se una chiave segreta è finita nel codice che la tua app manda ai browser, se le tue tabelle di database rispondono a una richiesta senza nessuno collegato, se file come \u002F.env si aprono direttamente dal tuo indirizzo dal vivo, e se i tuoi bucket di storage elencano quello che i tuoi utenti hanno caricato. È su questi quattro che un estraneo arriva ai tuoi dati o ai tuoi soldi. Le altre cinque voci della lista valgono la pena e nessuna è un motivo per rimandare un lancio.",{"q":599,"a":600},"Quanto tempo ci vuole?","Tre dei quattro urgenti sono uno sguardo ciascuno una volta che sai dove guardare: una ricerca nel tuo progetto di quattro prefissi di chiave, la pagina Advisors in Supabase e due indirizzi scritti in una finestra privata. Quello del database dura quanto sono le tue tabelle, perché leggi la regola su ognuna. La nostra scansione gratuita fa tutti e nove dall’esterno in circa 20 secondi senza account, che è la scorciatoia onesta per un primo giro.",{"q":602,"a":603},"Mi serve uno sviluppatore per qualcuna di queste?","Per i test no. Ognuno dei nove è una pagina di un pannello, un indirizzo nel tuo browser o una ricerca nel tuo progetto. Con le riparazioni è un’altra storia: spostare su un server il lavoro che richiedeva una chiave segreta è sviluppo vero, e scrivere una regola di sicurezza per righe che faccia entrare le persone giuste è la parte che la maggior parte dei proprietari affida a qualcuno. Fare i test da solo vale comunque la pena, perché quello che trovi decide cosa chiedi.",{"q":605,"a":606},"Qual è la voce più importante?","Se le tue tabelle di database rispondono a un estraneo. È la voce in cui i dati in gioco sono dei tuoi utenti e non tuoi, ed è il risultato serio più comune che vediamo. Tra le app il cui progetto Supabase ha risposto alla nostra scansione tra il 12 e il 14 agosto 2026, il 57 % aveva almeno una tabella che consegnava righe a una richiesta senza nessuno collegato. Una chiave segreta nel bundle fa più danni quando capita, e capita molto più di rado.",{"q":608,"a":609},"Ogni quanto devo ricontrollare?","Dopo ogni deploy che ha toccato le regole del database, le chiavi o le impostazioni di build, e una volta al mese per il resto. Un risultato descrive l’app che era dal vivo quando hai chiesto. La sicurezza per righe viene spenta per far caricare una pagina e resta spenta, una chiave viene incollata per far uscire una funzione stasera, un bucket viene aperto per un caricamento. Nessuna di queste cose si annuncia da sola.",{"q":611,"a":612},"Passare questa lista vuol dire che la mia app è sicura?","No. Vuol dire che nove domande poste dall’esterno sono tornate pulite il giorno in cui le hai poste. Un controllo esterno automatico non è un audit, e l’assenza di un risultato non è una garanzia. Tutto quello che gira sul tuo server è invisibile a tutti e nove: il tuo codice server, le chiavi che hai tenuto fuori dal browser, la chiave che hai committato a marzo e cancellato ad aprile, e se un utente collegato può aprire l’ordine di un altro cambiando un numero nell’indirizzo.","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",[615,616,617,618,619,620,621,622,623],"checklist sicurezza vibe coding","checklist sicurezza app vibe coded","checklist sicurezza app ia","checklist sicurezza lovable","sicurezza bolt prima del lancio","checklist lancio app fatta con ia","controllo sicurezza prima del lancio","la mia app è pronta al lancio sicurezza","checklist produzione vibe coding",{},true,"La checklist di sicurezza del vibe coding","\u002Fblog\u002Fvibe-coded-app-security-checklist","2026-09-20",{"title":5,"description":591},"blog\u002Fvibe-coded-app-security-checklist",[632,633,634],"Una checklist di sicurezza del vibe coding serve solo se riesci a finirla. Questa ha nove voci, perché nove è il numero di cose che chiunque può verificare dall’esterno su un’app dal vivo.","Quattro di esse decidono se un estraneo arriva ai tuoi dati o ai tuoi soldi. Falle prima di passare l’indirizzo a chiunque.","Le altre cinque sono impostazioni e date. Stanno nella lista, e nessuna di loro da sola consegna una riga del tuo database.","nCGd0U4prW55xSR-jrFgetHmgU107y3RoPJYQbp_IKc",[637,644,650,656,657,663,669,675,681,687,693,699,705,711,716,721,726,732,738,743,748,754,759,765,771,777,783,789,795,800,806,812,817,823,829,835,839,845,851,856,861,866],{"path":638,"title":639,"description":640,"published":641,"category":642,"image":643,"draft":592},"\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":645,"title":646,"description":647,"published":648,"category":588,"image":649,"draft":592},"\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":651,"title":652,"description":653,"published":654,"category":588,"image":655,"draft":592},"\u002Fblog\u002Fis-lovable-safe","Lovable è sicuro? Cosa abbiamo trovato in 18.554 app Lovable","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.","2026-09-21","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":627,"title":5,"description":591,"published":628,"category":588,"image":613,"draft":592},{"path":658,"title":659,"description":660,"published":661,"category":588,"image":662,"draft":592},"\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":664,"title":665,"description":666,"published":667,"category":588,"image":668,"draft":592},"\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":670,"title":671,"description":672,"published":673,"category":588,"image":674,"draft":592},"\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":676,"title":677,"description":678,"published":679,"category":588,"image":680,"draft":592},"\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":682,"title":683,"description":684,"published":685,"category":588,"image":686,"draft":592},"\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":688,"title":689,"description":690,"published":691,"category":642,"image":692,"draft":592},"\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":694,"title":695,"description":696,"published":697,"category":642,"image":698,"draft":592},"\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":700,"title":701,"description":702,"published":703,"category":642,"image":704,"draft":592},"\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":706,"title":707,"description":708,"published":709,"category":588,"image":710,"draft":592},"\u002Fblog\u002Fsafest-ai-app-builder","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":280,"title":712,"description":713,"published":714,"category":588,"image":715,"draft":592},"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":269,"title":717,"description":718,"published":719,"category":588,"image":720,"draft":592},"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":257,"title":722,"description":723,"published":724,"category":588,"image":725,"draft":592},"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":727,"title":728,"description":729,"published":730,"category":588,"image":731,"draft":592},"\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":733,"title":734,"description":735,"published":736,"category":588,"image":737,"draft":592},"\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":509,"title":739,"description":740,"published":741,"category":588,"image":742,"draft":592},"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":368,"title":744,"description":745,"published":746,"category":588,"image":747,"draft":592},"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":749,"title":750,"description":751,"published":752,"category":588,"image":753,"draft":592},"\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":317,"title":755,"description":756,"published":757,"category":588,"image":758,"draft":592},"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":760,"title":761,"description":762,"published":763,"category":642,"image":764,"draft":592},"\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":766,"title":767,"description":768,"published":769,"category":588,"image":770,"draft":592},"\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":772,"title":773,"description":774,"published":775,"category":642,"image":776,"draft":592},"\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":778,"title":779,"description":780,"published":781,"category":588,"image":782,"draft":592},"\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":784,"title":785,"description":786,"published":787,"category":588,"image":788,"draft":592},"\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":790,"title":791,"description":792,"published":793,"category":588,"image":794,"draft":592},"\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":404,"title":796,"description":797,"published":798,"category":588,"image":799,"draft":592},"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":801,"title":802,"description":803,"published":804,"category":642,"image":805,"draft":592},"\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":807,"title":808,"description":809,"published":810,"category":642,"image":811,"draft":592},"\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":340,"title":813,"description":814,"published":815,"category":588,"image":816,"draft":592},"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":818,"title":819,"description":820,"published":821,"category":588,"image":822,"draft":592},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","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":824,"title":825,"description":826,"published":827,"category":642,"image":828,"draft":592},"\u002Fblog\u002Fai-agent-deleted-my-database","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":830,"title":831,"description":832,"published":833,"category":588,"image":834,"draft":592},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","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":386,"title":836,"description":837,"published":833,"category":588,"image":838,"draft":592},"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":840,"title":841,"description":842,"published":843,"category":588,"image":844,"draft":592},"\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":846,"title":847,"description":848,"published":849,"category":642,"image":850,"draft":592},"\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":285,"title":852,"description":853,"published":854,"category":588,"image":855,"draft":592},"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":857,"title":858,"description":859,"published":854,"category":642,"image":860,"draft":592},"\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":447,"title":862,"description":863,"published":864,"category":642,"image":865,"draft":592},"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":239,"title":867,"description":868,"published":864,"category":588,"image":869,"draft":592},"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",1790150956021]