[{"data":1,"prerenderedAt":654},["ShallowReactive",2],{"blog-it-vibe-coding-security-scanner":3,"blog-index-it":411},{"id":4,"title":5,"body":6,"category":364,"cover":365,"coverAlt":366,"description":367,"draft":368,"extension":369,"faq":370,"image":388,"keywords":389,"meta":399,"navigation":400,"ogTitle":401,"path":402,"published":403,"seo":404,"stem":405,"tldr":406,"updated":403,"__hash__":410},"blog_it\u002Fblog\u002Fvibe-coding-security-scanner.md","Scanner di sicurezza per vibe coding: cosa si perde",{"type":7,"value":8,"toc":352},"minimark",[9,13,21,24,29,32,35,38,41,45,48,126,132,135,144,148,151,157,163,169,175,178,182,185,188,193,196,209,213,216,277,284,287,291,294,297,300,310,314,336,344],[10,11,12],"p",{},"Incolli l’indirizzo della tua app in uno scanner, aspetti una ventina di secondi\ne torna indietro una lettera. A, forse C. Poi arriva la domanda che conta\ndavvero: vuol dire che la mia app è a posto?",[10,14,15,16,20],{},"Ecco la parte che quasi tutti gli strumenti di questa categoria ti lasciano\ncapire da solo. ",[17,18,19],"strong",{},"Uno scanner di sicurezza per vibe coding legge la tua app dalla\nstrada."," Vede quello che vede il browser di un visitatore qualunque, che è\ntantissimo, e si ferma alla tua porta d’ingresso. Quello che il tuo server fa in\nprivato resta privato anche per lui.",[10,22,23],{},"Sapere dove passa quella linea è ciò che rende una scansione utile. Una A ti dice\nche le porte sulla strada erano chiuse quando abbiamo guardato, e non dice\nassolutamente nulla sulla stanza che c’è dietro.",[25,26,28],"h2",{"id":27},"che-cosè-uno-scanner-di-sicurezza-per-vibe-coding","Che cos’è uno scanner di sicurezza per vibe coding?",[10,30,31],{},"Uno strumento che carica la tua app dal vivo come farebbe un visitatore, e poi\nlegge quello che è tornato indietro.",[10,33,34],{},"Gli dai un URL. Non chiede il tuo codice sorgente, il tuo repository, la password\ndel tuo database o un account presso il builder che hai usato. Recupera la tua\npagina, lascia girare il JavaScript per vedere il codice che la tua app consegna\ndavvero, legge le intestazioni arrivate con la risposta, guarda il tuo\ncertificato e pone al tuo database e al tuo archivio file qualche domanda che\npotrebbe porre qualunque sconosciuto.",[10,36,37],{},"Poi annota che cosa ha risposto. È tutta qui la forma della cosa, ed è il motivo\nper cui ci vogliono venti secondi invece di una settimana.",[10,39,40],{},"Questa categoria esiste perché le app costruite con Lovable, Bolt, v0, Cursor,\nReplit, Windsurf e Base44 sbagliano nello stesso ristretto numero di punti, e\nquasi tutti quei punti si vedono da fuori. Una chiave segreta nel bundle. Una\ntabella che risponde a uno sconosciuto. Un bucket di storage che elenca il\nproprio contenuto. Nessuno ha bisogno del tuo sorgente per trovarne uno, perché\nla tua app li porge a ogni visitatore per costruzione.",[25,42,44],{"id":43},"cosa-legge-davvero-una-scansione","Cosa legge davvero una scansione",[10,46,47],{},"Cinque superfici, e i tuoi stessi visitatori ne scaricano quattro senza\naccorgersene.",[49,50,51,67],"table",{},[52,53,54],"thead",{},[55,56,57,61,64],"tr",{},[58,59,60],"th",{},"Cosa legge",[58,62,63],{},"Da dove arriva",[58,65,66],{},"Cosa intercetta",[68,69,70,82,93,104,115],"tbody",{},[55,71,72,76,79],{},[73,74,75],"td",{},"Il tuo bundle JavaScript",[73,77,78],{},"I file che un browser scarica per far girare la tua app",[73,80,81],{},"Chiavi consegnate al browser, i percorsi API che chiama, i nomi di tabella che usa",[55,83,84,87,90],{},[73,85,86],{},"Le intestazioni di risposta",[73,88,89],{},"Arrivano con ogni pagina servita dal tuo hosting",[73,91,92],{},"Protezioni del browser assenti, una regola che risponde a richieste da qualunque sito",[55,94,95,98,101],{},[73,96,97],{},"Le risposte del database",[73,99,100],{},"La stessa API di progetto che la tua app chiama da sé",[73,102,103],{},"Una tabella che consegna righe a una richiesta senza nessuno autenticato",[55,105,106,109,112],{},[73,107,108],{},"I tuoi bucket di storage",[73,110,111],{},"La stessa API pubblica di storage con cui la tua app carica",[73,113,114],{},"Un bucket che elenca i propri file a uno sconosciuto",[55,116,117,120,123],{},[73,118,119],{},"Certificato e dominio",[73,121,122],{},"L’handshake TLS e la registrazione pubblica nel registro",[73,124,125],{},"Un certificato prossimo alla scadenza, un dominio prossimo al decadere",[127,128],"diagram",{"alt":129,"caption":130,"src":131},"Un segno di scanner a sinistra raggiunge cinque pannelli con linee continue del colore accento. Una linea verticale attraversa l’immagine, e dietro di essa stanno altri quattro pannelli disegnati come contorni tratteggiati, ciascuno con la propria linea che si ferma alla barra e vi porta una croce.","Cinque superfici arrivano in un browser, quindi una scansione può leggerle. Le quattro dietro la barra non lasciano mai il tuo server, quindi niente da fuori può farlo.","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fwhere-the-scan-stops-1600x820.png",[10,133,134],{},"Il bundle è quello che sorprende. Il codice della tua app deve arrivare nel\nbrowser prima di poterci girare, quindi ci arriva anche ogni chiave che contiene,\ninsieme ai percorsi API che chiama e spesso ai nomi delle tabelle che legge. Uno\nscanner preme lo stesso F12 che premerebbe un visitatore curioso. È solo più\nveloce, e legge tutti i file invece del primo.",[10,136,137,138,143],{},"La domanda al database è quella che tutti si aspettano invasiva, ed è la cosa più\nmite dell’elenco. Per scoprire se una tabella è leggibile da sconosciuti, il\nnostro chiede all’API un conteggio delle righe e legge il numero da\nun’intestazione di risposta. Un conteggio sopra lo zero significa che quelle\nrighe sono raggiungibili. Non viene mai recuperata una riga, e la chiave con cui\nchiede è quella pubblicabile già presente nel tuo bundle, che\n",[139,140,142],"a",{"href":141},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","dovrebbe stare lì",".",[25,145,147],{"id":146},"le-quattro-cose-che-una-scansione-dellurl-non-può-vedere","Le quattro cose che una scansione dell’URL non può vedere",[10,149,150],{},"Tutto quello che accade sul tuo server, perché niente di tutto ciò viene mai\ninviato a un browser.",[10,152,153,156],{},[17,154,155],{},"Il tuo codice server."," Edge function, route API, funzioni del database, tutto\nquello che gira dentro Supabase o presso il tuo hosting. Uno scanner può chiamare\nun endpoint e leggere quello che torna. Non può leggere il codice che lo ha\nprodotto, quindi un errore che salta fuori solo con certi input resta invisibile.",[10,158,159,162],{},[17,160,161],{},"Le tue variabili d’ambiente."," Le chiavi che hai tenuto sul server, che è\nesattamente il loro posto. Una scansione può dirti che nel tuo bundle non ha\ntrovato un segreto. Non può confermarti che il segreto sia conservato bene,\nperché non vede mai il posto in cui lo hai messo.",[10,164,165,168],{},[17,166,167],{},"La tua cronologia delle versioni."," Una chiave committata a marzo e tolta ad\naprile è sparita dalla tua app ed è ancora nel tuo repository. Chiunque possa\nvedere quel repository può ancora leggerla, e nessuna quantità di sguardi al tuo\nsito dal vivo la farà emergere.",[10,170,171,174],{},[17,172,173],{},"La logica della tua app."," Se un utente autenticato può aprire l’ordine di un\naltro cambiando un numero nell’indirizzo. Se un modulo accetterà un prezzo\nmandato dal browser. Sono decisioni che la tua app prende su cosa permettere, e\nprenderle in castagna richiede di accedere e provare cose, cioè un penetration\ntest.",[10,176,177],{},"C’è un quinto limite che appartiene a noi e non alla categoria, e vale la pena\nconoscerlo prima di leggere uno dei nostri report. Supabase non serve più a una\nchiave pubblicabile l’elenco delle tabelle di un progetto, quindi uno scanner non\nha modo di chiedere come si chiamano le tue tabelle. Il nostro lavora invece con\ntre fonti: l’indice del progetto sui progetti più vecchi dove risponde ancora, i\nnomi di tabella che trova nel tuo stesso bundle, e un elenco di ventisei nomi\nfrequenti nelle app in vibe coding. Una tabella aperta con un nome insolito che\nnon compare mai nel tuo codice frontend è una che non raggiungeremo. L’advisor di\nSupabase la raggiunge, ed è il confronto di due sezioni più in basso.",[25,179,181],{"id":180},"una-scansione-pulita-vuol-dire-che-la-mia-app-è-sicura","Una scansione pulita vuol dire che la mia app è sicura?",[10,183,184],{},"No. Vuol dire che ogni domanda che la scansione poteva porre da fuori è tornata\npulita, ed è una frase più piccola di quanto sembri.",[10,186,187],{},"Una parte del motivo sono i quattro punti ciechi qui sopra. L’altra parte è che\nun controllo può finire in tre modi e solo uno di questi è un superato. Un\ncontrollo trova qualcosa. Un controllo chiede e riceve un no chiaro. Oppure un\ncontrollo non riceve alcuna risposta, perché la richiesta è scaduta, l’host l’ha\nrifiutata o la pagina non ha mai finito di caricare.",[127,189],{"alt":190,"caption":191,"src":192},"Un pannello di report con cinque righe. Tre portano un segno di spunta verde, una porta una croce rossa, e l’ultima ha una linea tratteggiata dove starebbe un segno e nessun verdetto.","Il terzo finale è quello da cercare. Un controllo che non ha ottenuto risposta è disegnato come nessuna risposta, perché un segno di spunta lì è una promessa su una domanda che nessuno è riuscito a porre.","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fthree-endings-1600x760.png",[10,194,195],{},"Quel terzo finale è ciò che decide se ci si può fidare di un report, ed è il più\nfacile da arrotondare in silenzio a un segno di spunta. Il nostro scrive\n«Impossibile controllare» sulla riga e lascia stare il tuo voto. Un segno di\nspunta falso sarebbe la cosa più dannosa che questo scanner potrebbe mettere su\nuno schermo, perché ci agiresti sopra.",[10,197,198,199,203,204,208],{},"È la stessa onestà a rendere i nostri numeri pubblicati meno allarmanti di quanto\nsembrino a prima vista. Tra il 12 e il 14 agosto 2026 abbiamo fatto girare questi\ncontrolli su\n",[139,200,202],{"href":201},"\u002Fresearch\u002Fvibe-coded-app-security-2026","30.998 app dal vivo in vibe coding",", e\nil 99% è tornato con almeno un rilievo. Quasi tutto è una riga sola: intestazioni\ndi sicurezza del browser che la piattaforma di hosting non imposta mai e che la\nmaggior parte dei proprietari su un sottodominio di un builder\n",[139,205,207],{"href":206},"\u002Fblog\u002Fmissing-security-headers","non può attivare da sé",". Contarle è corretto.\nLeggere quel 99% come «quasi tutte le app sono in pericolo» non lo è.",[25,210,212],{"id":211},"scansione-dellurl-del-repository-o-ladvisor-di-supabase","Scansione dell’URL, del repository o l’advisor di Supabase?",[10,214,215],{},"Leggono tre cose diverse, quindi la domanda utile è quale di loro può vedere il\nproblema che hai.",[49,217,218,233],{},[52,219,220],{},[55,221,222,225,227,230],{},[58,223,224],{},"Tipo",[58,226,60],{},[58,228,229],{},"Cosa ti chiede",[58,231,232],{},"Dov’è cieco",[68,234,235,249,263],{},[55,236,237,240,243,246],{},[73,238,239],{},"Scanner di URL",[73,241,242],{},"La tua app dal vivo, da fuori",[73,244,245],{},"Un URL",[73,247,248],{},"Tutto quello che il tuo server tiene per sé",[55,250,251,254,257,260],{},[73,252,253],{},"Scanner di repository",[73,255,256],{},"Il tuo sorgente e la sua cronologia",[73,258,259],{},"Accesso al tuo repo",[73,261,262],{},"Se quel codice è pubblicato e cosa fanno le tue regole in produzione",[55,264,265,268,271,274],{},[73,266,267],{},"Supabase Security Advisor",[73,269,270],{},"La configurazione di quel progetto",[73,272,273],{},"Il tuo account Supabase",[73,275,276],{},"Tutto ciò che sta fuori dal progetto: bundle, intestazioni, altri fornitori",[10,278,279,280,143],{},"Si sovrappongono molto meno di quanto i nomi lascino pensare. L’advisor di\nSupabase passa in rassegna il tuo progetto e segnala problemi di configurazione,\ntra cui tabelle con la Row Level Security impostata male. Una scansione dell’URL\nlegge la conseguenza, cioè se quelle righe stanno arrivando a sconosciuti proprio\nadesso. I due si separano più spesso di quanto ti aspetteresti, perché\n",[139,281,283],{"href":282},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","attivare l’impostazione non equivale a essere protetti",[10,285,286],{},"Uno scanner di repository è l’unico dei tre che può trovare la chiave che hai\ncancellato il mese scorso. È anche l’unico che non può dirti se il codice che ha\nappena letto è quello che hai pubblicato.",[25,288,290],{"id":289},"come-si-legge-il-voto","Come si legge il voto",[10,292,293],{},"La lettera è limitata dal peggiore rilievo del report, quindi un buon punteggio\nnon salva mai un rilievo grave.",[10,295,296],{},"Ogni scansione parte da 100. Un rilievo critico costa 40 punti, uno alto 15, uno\nmedio 5, uno basso 1. Poi si posa un tetto sopra l’aritmetica: un rilievo critico\nlimita il voto a D, due lo limitano a F, e un solo rilievo alto lo limita a C.\nUn’app per il resto in ordine con una sola tabella aperta esce con una D, ed è il\ncomportamento voluto.",[10,298,299],{},"Quello che hai fatto bene compare nel report e non ti costa niente. La tua chiave\nSupabase pubblicabile che sta nel bundle è elencata come corretta, perché è la\nsua ragione d’essere, e dipingerla di rosso è il modo in cui uno strumento ti\ninsegna a ignorare il rosso.",[301,302,304],"callout",{"type":303},"warn",[10,305,306,309],{},[17,307,308],{},"Un voto descrive l’app che era dal vivo quando l’hai chiesto."," La Row Level\nSecurity viene disattivata per far caricare una pagina, una chiave server viene\nincollata nel frontend perché una funzione esca stasera, un bucket viene aperto\nper un caricamento e resta aperto. Nessuno di questi si annuncia, e ciascuno\nbasta a spostare un voto da A a F tra un martedì e quello dopo.",[25,311,313],{"id":312},"cosa-fare-con-il-risultato-di-una-scansione","Cosa fare con il risultato di una scansione",[315,316,317],"key-takeaways",{},[318,319,320,324,327,330,333],"ul",{},[321,322,323],"li",{},"Leggi per prime le righe che dicono «Impossibile controllare». Sono le domande ancora aperte, e non sono un superato.",[321,325,326],{},"Lavora per gravità. Un rilievo critico vuol dire che oggi si può arrivare ai tuoi dati; un’intestazione mancante è un’impostazione che nessuno ha attivato.",[321,328,329],{},"Occupati a parte di quello che sta dentro: tieni le chiavi segrete sul server, cerca nella tua cronologia delle versioni le chiavi che hai cancellato, e accedi come utente di prova per vedere fin dove arriva.",[321,331,332],{},"Riscansiona dopo ogni pubblicazione, e ogni volta che qualcuno tocca una regola del database. È il cambiamento di cui niente ti avverte.",[321,334,335],{},"Se la tua app incassa pagamenti o tiene dati sanitari, prima o poi commissiona un penetration test. Un controllo esterno automatico non è un audit, e nessuna assenza di rilievi è una garanzia.",[10,337,338,339,343],{},"Il nostro ",[139,340,342],{"href":341},"\u002Fsecurity-scanner","scanner di sicurezza per siti gratuito"," esegue nove\ncontrolli in sola lettura su qualunque URL dal vivo, in una ventina di secondi e\nsenza account. Legge, non scrive mai e non accede mai.",[10,345,346,347,351],{},"Se preferisci passarci prima a mano, la\n",[139,348,350],{"href":349},"\u002Fchecklist","checklist di sicurezza da 10 minuti"," copre lo stesso terreno\nnell’ordine in cui vale la pena farlo.",{"title":353,"searchDepth":354,"depth":354,"links":355},"",3,[356,358,359,360,361,362,363],{"id":27,"depth":357,"text":28},2,{"id":43,"depth":357,"text":44},{"id":146,"depth":357,"text":147},{"id":180,"depth":357,"text":181},{"id":211,"depth":357,"text":212},{"id":289,"depth":357,"text":290},{"id":312,"depth":357,"text":313},"Basi della sicurezza","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcover-1200x630.png","Una finestra di app illuminata vista di fronte, e dietro altre due finestre che arretrano nell’ombra, illeggibili.","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.",false,"md",[371,373,376,379,382,385],{"q":28,"a":372},"Uno strumento che carica la tua app dal vivo come farebbe un visitatore e legge quello che torna indietro: il JavaScript che la tua app consegna al browser, le intestazioni che il tuo hosting ci aggiunge, il certificato e le risposte che il tuo database e il tuo archivio file danno a una richiesta che arriva da uno sconosciuto. Gli serve un URL e nient’altro. Riporta quello che ha trovato sulla superficie pubblica della tua app, che è proprio dove le app costruite con una IA sbagliano più spesso.",{"q":374,"a":375},"È sicuro scansionare la mia app?","Sì, se lo scanner si limita a leggere. Il nostro fa lo stesso tipo di richieste di un visitatore qualunque, non accede mai, non scrive, non crea e non cancella niente da nessuna parte, e non scarica mai i dati dei tuoi utenti. Per capire se una tabella del database è leggibile chiede un conteggio delle righe e legge il numero, senza recuperare nemmeno una riga. Il traffico è una manciata di richieste, cioè meno di una persona che naviga sul tuo sito per un minuto.",{"q":377,"a":378},"Una scansione ha bisogno del mio codice sorgente o della password del database?","No. Uno scanner di URL lavora interamente da fuori, quindi non c’è nulla da collegare e nessuna credenziale da consegnare. Questo è anche il suo limite: vede solo quello che la tua app mostra già a ogni visitatore. Uno strumento che legge il tuo repository o si collega al tuo account del database vede cose diverse, e l’articolo qui sopra mette i tre a confronto.",{"q":380,"a":381},"Funziona con Lovable, Bolt, Cursor, Replit, v0, Windsurf e Base44?","Sì, e con qualunque altra cosa metta un sito online, perché la scansione guarda quello che è pubblicato e non quello che lo ha scritto. Il builder conta per la riparazione più che per il controllo: sistemare una tabella aperta è una sequenza di clic diversa in Lovable rispetto a Replit, ed è per questo che il testo della correzione nomina il tuo builder.",{"q":383,"a":384},"Cosa non controlla uno scanner di sicurezza?","Tutto quello che resta sul tuo server. Il codice del server e le funzioni del database, le variabili d’ambiente che hai tenuto fuori dal browser, la chiave che hai committato e poi cancellato dal repository, e i bug della tua logica, per esempio un utente autenticato che apre l’ordine di un altro cambiando un numero nell’indirizzo. Trovare quest’ultimo gruppo richiede di accedere e provare cose, e questo è un penetration test e non una scansione.",{"q":386,"a":387},"Uno scanner di sicurezza per vibe coding è gratuito?","Il nostro lo è, almeno per la scansione in sé: ottieni il voto, il punteggio e il numero dei rilievi sullo schermo in circa 20 secondi, senza account, e i rilievi dettagliati con le correzioni dopo aver dato un indirizzo email. I piani a pagamento esistono per quello che una scansione singola non può fare, cioè accorgersi che il mese prossimo qualcosa è cambiato. Un voto è vero nel secondo in cui lo prendi.","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",[390,391,392,393,394,395,396,342,397,398],"scanner di sicurezza per vibe coding","scanner vibe code","scanner di sicurezza app ia","scanner di sicurezza per app generate con ia","scansionare la mia app lovable per vulnerabilità","scansione di sicurezza app bolt","scanner di sicurezza app replit","controllare le chiavi api esposte della mia app","la mia app in vibe coding è sicura",{},true,"Cosa si perde uno scanner di sicurezza per vibe coding","\u002Fblog\u002Fvibe-coding-security-scanner","2026-09-05",{"title":5,"description":367},"blog\u002Fvibe-coding-security-scanner",[407,408,409],"Uno scanner di sicurezza per vibe coding legge quello che i browser dei tuoi visitatori già scaricano: il tuo bundle, le tue intestazioni, il tuo certificato e le risposte che il tuo database dà a uno sconosciuto.","Questo copre proprio la classe di errori più frequenti quando si costruisce con una IA. Non copre nulla di quello che accade sul tuo server.","Un risultato pulito significa che ogni domanda che la scansione poteva porre da fuori è tornata pulita. Prendilo come un pensiero in meno.","U8gAZoiQhRRdSD5gLiSup5Xlyfb3uwix2UuqYXF2T0Y",[412,419,425,431,437,443,449,455,461,467,473,479,485,491,497,503,509,515,521,522,527,533,539,545,551,557,563,569,575,581,587,593,599,605,611,617,622,628,634,639,644,650],{"path":413,"title":414,"description":415,"published":416,"category":417,"image":418,"draft":368},"\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":420,"title":421,"description":422,"published":423,"category":364,"image":424,"draft":368},"\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":426,"title":427,"description":428,"published":429,"category":364,"image":430,"draft":368},"\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":432,"title":433,"description":434,"published":435,"category":364,"image":436,"draft":368},"\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":438,"title":439,"description":440,"published":441,"category":364,"image":442,"draft":368},"\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":444,"title":445,"description":446,"published":447,"category":364,"image":448,"draft":368},"\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":450,"title":451,"description":452,"published":453,"category":364,"image":454,"draft":368},"\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":456,"title":457,"description":458,"published":459,"category":364,"image":460,"draft":368},"\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":462,"title":463,"description":464,"published":465,"category":364,"image":466,"draft":368},"\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":468,"title":469,"description":470,"published":471,"category":417,"image":472,"draft":368},"\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":474,"title":475,"description":476,"published":477,"category":417,"image":478,"draft":368},"\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":480,"title":481,"description":482,"published":483,"category":417,"image":484,"draft":368},"\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":486,"title":487,"description":488,"published":489,"category":364,"image":490,"draft":368},"\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":492,"title":493,"description":494,"published":495,"category":364,"image":496,"draft":368},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","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":498,"title":499,"description":500,"published":501,"category":364,"image":502,"draft":368},"\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":504,"title":505,"description":506,"published":507,"category":364,"image":508,"draft":368},"\u002Fblog\u002Frotate-supabase-service-role-key","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":510,"title":511,"description":512,"published":513,"category":364,"image":514,"draft":368},"\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":516,"title":517,"description":518,"published":519,"category":364,"image":520,"draft":368},"\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":402,"title":5,"description":367,"published":403,"category":364,"image":388,"draft":368},{"path":206,"title":523,"description":524,"published":525,"category":364,"image":526,"draft":368},"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":528,"title":529,"description":530,"published":531,"category":364,"image":532,"draft":368},"\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":534,"title":535,"description":536,"published":537,"category":364,"image":538,"draft":368},"\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":540,"title":541,"description":542,"published":543,"category":417,"image":544,"draft":368},"\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":546,"title":547,"description":548,"published":549,"category":364,"image":550,"draft":368},"\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":552,"title":553,"description":554,"published":555,"category":417,"image":556,"draft":368},"\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":558,"title":559,"description":560,"published":561,"category":364,"image":562,"draft":368},"\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":564,"title":565,"description":566,"published":567,"category":364,"image":568,"draft":368},"\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":570,"title":571,"description":572,"published":573,"category":364,"image":574,"draft":368},"\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":576,"title":577,"description":578,"published":579,"category":364,"image":580,"draft":368},"\u002Fblog\u002Fcors-wildcard-security-risk","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":582,"title":583,"description":584,"published":585,"category":417,"image":586,"draft":368},"\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":588,"title":589,"description":590,"published":591,"category":417,"image":592,"draft":368},"\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":594,"title":595,"description":596,"published":597,"category":364,"image":598,"draft":368},"\u002Fblog\u002Fsupabase-storage-bucket-public","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":600,"title":601,"description":602,"published":603,"category":364,"image":604,"draft":368},"\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":606,"title":607,"description":608,"published":609,"category":417,"image":610,"draft":368},"\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":612,"title":613,"description":614,"published":615,"category":364,"image":616,"draft":368},"\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":618,"title":619,"description":620,"published":615,"category":364,"image":621,"draft":368},"\u002Fblog\u002Fsource-maps-exposed-in-production","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":623,"title":624,"description":625,"published":626,"category":364,"image":627,"draft":368},"\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":629,"title":630,"description":631,"published":632,"category":417,"image":633,"draft":368},"\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":282,"title":635,"description":636,"published":637,"category":364,"image":638,"draft":368},"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":640,"title":641,"description":642,"published":637,"category":417,"image":643,"draft":368},"\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":645,"title":646,"description":647,"published":648,"category":417,"image":649,"draft":368},"\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":141,"title":651,"description":652,"published":648,"category":364,"image":653,"draft":368},"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",1790150956077]