[{"data":1,"prerenderedAt":1086},["ShallowReactive",2],{"blog-it-is-bolt-safe":3,"blog-index-it":736},{"id":4,"title":5,"body":6,"category":694,"cover":695,"coverAlt":696,"description":697,"draft":698,"extension":699,"faq":700,"image":715,"keywords":716,"meta":725,"navigation":726,"ogTitle":5,"path":727,"published":728,"seo":729,"stem":730,"tldr":731,"updated":728,"__hash__":735},"blog_it\u002Fblog\u002Fis-bolt-safe.md","Bolt è sicuro? Cosa abbiamo trovato in 1.123 app Bolt",{"type":7,"value":8,"toc":678},"minimark",[9,18,26,29,34,37,40,62,65,69,82,218,221,227,243,247,250,260,271,283,286,297,301,304,307,367,374,382,389,394,398,401,404,426,434,438,441,444,449,459,463,466,469,485,492,496,499,506,513,516,520,523,561,565,571,580,599,602,613,630,633,641,645,667],[10,11,12,13,17],"p",{},"Hai costruito qualcosa su Bolt, hai premuto Publish, e adesso vive a un\nindirizzo che finisce con ",[14,15,16],"code",{},"bolt.host",". Prima di mandare quel link a clienti veri\nhai digitato \"bolt è sicuro\" in un campo di ricerca, e quello che è tornato era\nun elenco di cinque vulnerabilità che, a quanto pare, stanno in quasi ogni app\nBolt, con uno scanner in vendita in fondo alla pagina.",[10,19,20,21,25],{},"Ecco dove sbagliano quegli elenchi: ",[22,23,24],"strong",{},"mettono ogni rischio sullo stesso piano, e\nsulle app Bolt online la maggior parte di quei rischi compare appena."," Source\nmap, header cross-origin aperti e route API non protette ci stanno alla pari con\nle chiavi esposte e le tabelle aperte. Nei nostri dati le prime tre sono\ncomparse su 13, 1 e 4 app su più di mille. Le altre due sono dove stavano i\nrilievi.",[10,27,28],{},"Tra il 12 e il 14 agosto 2026 abbiamo passato gli stessi nove controlli esterni\nche chiunque può lanciare gratis dalla nostra homepage su 30.998 app online, e\n1.123 di queste erano pubblicate sull’hosting di Bolt. Questo è ciò che è\ntornato per quelle, e qui si ferma il nostro sguardo.",[30,31,33],"h2",{"id":32},"bolt-è-sicuro","Bolt è sicuro?",[10,35,36],{},"Per tutto ciò che decide Bolt stesso, sì. Il suo hosting è uscito pulito quanto\nquello di Lovable, e tutto ciò che ha abbassato un voto stava dentro un’app\ncostruita dal suo proprietario.",[10,38,39],{},"Pensa a un’app Bolt come a un negozio. Bolt costruisce l’edificio: l’indirizzo,\nil certificato, l’hosting. Tu riempi la vetrina, cioè ogni pagina, immagine e\nscript che la tua app consegna a un visitatore, e chiunque passi davanti può\nleggere quello che c’è dentro. Dietro il negozio c’è il magazzino, il tuo\ndatabase, con la sua porta e la sua serratura. \"Bolt è sicuro\" sono in realtà tre\ndomande, una per ciascuno.",[41,42,43,50,56],"ol",{},[44,45,46,49],"li",{},[22,47,48],{},"L’edificio."," Bolt pubblica la tua app come si deve: un certificato valido,\nun dominio che non scade, niente di dimenticato a un indirizzo pubblico.\nQuesto è il lavoro di Bolt.",[44,51,52,55],{},[22,53,54],{},"La vetrina."," Quello che il browser di un visitatore scarica. Una chiave\nlasciata lì può leggerla chiunque guardi, in qualunque modo ci sia finita.",[44,57,58,61],{},[22,59,60],{},"Il magazzino."," Se il tuo database risponde a uno sconosciuto che fa il giro\ndal retro e chiede. Dipende da una serratura che metti tu, tabella per\ntabella.",[10,63,64],{},"I nostri controlli leggono tutte e tre da fuori. Nessuno di loro legge il codice\nscritto dall’agente di Bolt come lo leggeresti tu nell’editor, e questo articolo\nnon tira a indovinare.",[30,66,68],{"id":67},"cosa-abbiamo-trovato-in-1123-app-bolt","Cosa abbiamo trovato in 1.123 app Bolt",[10,70,71,72,75,76,81],{},"Nove controlli, eseguiti da fuori, senza login e senza accesso all’account di\nnessuno. Quando un database rispondeva, gli abbiamo chiesto quante righe avrebbe\nconsegnato e ci siamo fermati lì; non ne abbiamo letta nessuna. Nessuna app viene\nnominata qui o altrove in ciò che pubblichiamo. Ogni quota qui sotto è sulle app\nsu cui quel controllo ",[22,73,74],{},"ha risposto",", perché un controllo che non è riuscito a\nfinire è sconosciuto, non superato, ed è per questo che i denominatori cambiano.\nMetodo e dati sono ",[77,78,80],"a",{"href":79},"\u002Fresearch\u002Fvibe-coded-app-security-2026","nel rapporto",".",[83,84,85,102],"table",{},[86,87,88],"thead",{},[89,90,91,95,99],"tr",{},[92,93,94],"th",{},"Cosa abbiamo controllato",[92,96,98],{"align":97},"right","App Bolt",[92,100,101],{},"Chi lo decide",[103,104,105,117,128,138,149,159,169,179,197,208],"tbody",{},[89,106,107,111,114],{},[108,109,110],"td",{},"Header di sicurezza del browser mancanti",[108,112,113],{"align":97},"1.121 su 1.123",[108,115,116],{},"L’hosting di Bolt",[89,118,119,122,125],{},[108,120,121],{},"Qualcosa con la forma di una chiave nel codice che un visitatore scarica",[108,123,124],{"align":97},"75 su 1.123 (7 %)",[108,126,127],{},"La tua app",[89,129,130,133,136],{},[108,131,132],{},"Una tabella del database leggibile senza login",[108,134,135],{"align":97},"27 su 35",[108,137,127],{},[89,139,140,143,146],{},[108,141,142],{},"Codice sorgente originale pubblicato (source map)",[108,144,145],{"align":97},"13 su 1.123 (1 %)",[108,147,148],{},"Un’impostazione di build",[89,150,151,154,157],{},[108,152,153],{},"Un bucket di storage che elenca i suoi file",[108,155,156],{"align":97},"6 su 901",[108,158,127],{},[89,160,161,164,167],{},[108,162,163],{},"Una route API che ha consegnato dati a uno sconosciuto",[108,165,166],{"align":97},"4 su 1.120",[108,168,127],{},[89,170,171,174,177],{},[108,172,173],{},"Qualsiasi sito autorizzato a chiamare la tua API",[108,175,176],{"align":97},"1 su 1.120",[108,178,127],{},[89,180,181,192,195],{},[108,182,183,184,187,188,191],{},"Un file privato come ",[14,185,186],{},".env"," o ",[14,189,190],{},".git\u002Fconfig"," a un URL pubblico",[108,193,194],{"align":97},"0 su 1.109",[108,196,127],{},[89,198,199,202,205],{},[108,200,201],{},"Certificato scaduto o non attendibile",[108,203,204],{"align":97},"0 su 1.119",[108,206,207],{},"Bolt",[89,209,210,213,216],{},[108,211,212],{},"Dominio in scadenza",[108,214,215],{"align":97},"0 su 1.123",[108,217,207],{},[10,219,220],{},"I voti: 1.051 A, 33 B, 24 C, 15 D e nessuna F.",[222,223],"diagram",{"alt":224,"caption":225,"src":226},"Sette barre orizzontali sulla stessa scala, ciascuna preceduta da un piccolo simbolo e seguita da un numero: 1.121 per gli header, 75 per le chiavi, 27 per le tabelle leggibili, 13 per le source map, 6 per i bucket, 4 per le route aperte e 1 per l’header cross-origin aperto. La barra in alto è lunga e grigio chiaro, le altre sono corte e turchesi, e le ultime tre sono linee sottili cerchiate.","Numeri di app su un’unica scala. La barra grigia dipende dall’hosting di Bolt. Ogni barra turchese viene da qualcosa dentro l’app, e la riga delle tabelle leggibili è misurata su una base molto più piccola, che un’immagine più avanti scompone.","\u002Fblog\u002Fis-bolt-safe\u002Fwhat-we-found-1600x720.png",[10,228,229,230,233,234,238,239,242],{},"Quella prima riga dipende da ciò che serve le tue pagine, e su\n",[14,231,232],{},"yourapp.bolt.host"," è Bolt, quindi 1.121 app hanno avuto la stessa risposta. Gli\nheader ",[77,235,237],{"href":236},"\u002Fblog\u002Fmissing-security-headers","vale la pena averli",", e non è con quelli\nche si prende una D. Togli quella riga e ",[22,240,241],{},"1.008 delle 1.123 app Bolt non\navevano nient’altro",". Le altre 115 sono l’argomento del resto di questo\narticolo.",[30,244,246],{"id":245},"cosa-fa-bene-bolt","Cosa fa bene Bolt",[10,248,249],{},"I controlli che dipendono da Bolt sono tornati quasi vuoti, e sull’unica\nimpostazione di build che misuriamo Bolt è alla pari con Lovable.",[10,251,252,255,256,81],{},[22,253,254],{},"Source map."," 13 app Bolt su 1.123 pubblicano i file originali dietro l’app,\ncommenti compresi. È poco più di una su cento, più o meno lo stesso tasso delle\n225 su 18.553 di Lovable, e\n",[77,257,259],{"href":258},"\u002Fblog\u002Fsource-maps-exposed-in-production","una map rivela più di quanto si pensi",[10,261,262,265,266,270],{},[22,263,264],{},"Header cross-origin."," Una app su 1.120 diceva a ogni sito del mondo che poteva\nchiamare la sua API. È il rilievo\n",[77,267,269],{"href":268},"\u002Fblog\u002Fcors-wildcard-security-risk","che più facilmente lascia un altro sito agire al posto del tuo utente",",\ne su Bolt è comparso una volta.",[10,272,273,276,277,279,280,282],{},[22,274,275],{},"L’edificio stesso."," Il certificato era valido su tutte le 1.119 app in cui ne\nabbiamo potuto leggere uno, nessun dominio su 1.123 era vicino alla scadenza, e\nnessuna app serviva un file ",[14,278,186],{}," o un ",[14,281,190],{}," a un indirizzo qualunque.",[10,284,285],{},"Niente di tutto questo ti ha chiesto qualcosa, e su certi altri builder sì.",[287,288,290],"callout",{"type":289},"note",[10,291,292,293,81],{},"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. ",[77,294,296],{"href":295},"\u002Fsecurity-scanner","Scansiona la tua app",[30,298,300],{"id":299},"di-cosa-erano-fatte-le-75-chiavi","Di cosa erano fatte le 75 chiavi",[10,302,303],{},"Quasi tutte andavano bene, e le poche che non andavano sono la cosa più cara di\nquesto articolo.",[10,305,306],{},"75 delle 1.123 app Bolt avevano qualcosa con la forma di una chiave nel codice\nche un visitatore scarica. Contate come forme, sono il 7 % delle app Bolt che\n\"espongono segreti\". Contate per quello che ogni chiave può fare, si dividono\ncosì, con ogni app contata una volta sola sotto la cosa più grave che contiene:",[83,308,309,322],{},[86,310,311],{},[89,312,313,316,319],{},[92,314,315],{},"Cosa abbiamo trovato nel bundle",[92,317,318],{"align":97},"App",[92,320,321],{},"Cosa significa",[103,323,324,335,346,357],{},[89,325,326,329,332],{},[108,327,328],{},"Una chiave API Google, e nient’altro",[108,330,331],{"align":97},"38",[108,333,334],{},"Di solito corretta, una volta limitata al tuo dominio",[89,336,337,340,343],{},[108,338,339],{},"Un segreto che non abbiamo potuto attribuire",[108,341,342],{"align":97},"26",[108,344,345],{},"Non abbiamo potuto dire a quale fornitore appartiene",[89,347,348,351,354],{},[108,349,350],{},"Una chiave OpenAI",[108,352,353],{"align":97},"10",[108,355,356],{},"Addebita sul tuo account, direttamente",[89,358,359,362,365],{},[108,360,361],{},"Una chiave Anthropic",[108,363,364],{"align":97},"1",[108,366,356],{},[10,368,369,370,81],{},"Le 38 chiavi Google sono il motivo per cui classifichiamo ogni chiave invece di\ncercare solo uno schema. Una chiave Google Maps nel browser sta dove deve stare,\ne la correzione è ",[77,371,373],{"href":372},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","limitarla al tuo dominio",[10,375,376,377,381],{},"Le dieci chiavi OpenAI sono il caso opposto. Una chiave OpenAI è un bearer\ntoken: chi ce l’ha può spenderla, da qualsiasi posto, e OpenAI non offre nessuna\nimpostazione che leghi una chiave al tuo sito. Tutte e dieci quelle app hanno\npreso una D, perché un solo rilievo critico mette un tetto al voto, qualunque\ncosa l’app abbia fatto bene per il resto.\n",[77,378,380],{"href":379},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","Cosa fare con una chiave così, in ordine","\ncomincia dal ruotarla oggi stesso.",[10,383,384,385,388],{},"Ecco il numero che fa di questo il rilievo di Bolt. Le app Bolt erano meno di 4\nsu 100 delle app che abbiamo scansionato, e portavano ",[22,386,387],{},"10 delle 33 chiavi\nOpenAI"," che abbiamo trovato in tutto. Per app, fa circa una app Bolt su 110,\ncontro 18 delle 18.554 app Lovable, circa una su mille. Dieci app sono un\ncampione piccolo, e qualcuna in più o in meno sposterebbe parecchio quel\nrapporto. Bolt resterebbe comunque davanti a tutti gli altri builder che abbiamo\nmisurato.",[222,390],{"alt":391,"caption":392,"src":393},"Due barre della stessa lunghezza, una sopra l’altra, ciascuna preceduta da un simbolo. La barra in alto rappresenta 30.998 app scansionate e ha all’estremità sinistra una sottile fetta turchese segnata 1.123, con il logo Bolt accanto. La barra in basso rappresenta 33 chiavi OpenAI e ha una fetta rossa lunga quasi un terzo, segnata 10.","Bolt era una fetta sottile delle app scansionate e quasi un terzo delle chiavi OpenAI trovate. I numeri sono piccoli, per questo li mostriamo entrambi invece di trasformarli in un tasso.","\u002Fblog\u002Fis-bolt-safe\u002Fshare-of-openai-keys-1600x620.png",[30,395,397],{"id":396},"perché-le-app-bolt-espongono-chiavi-api","Perché le app Bolt espongono chiavi API?",[10,399,400],{},"Da fuori non vediamo come ciascuna di quelle dieci chiavi sia arrivata lì, e le\nistruzioni di Bolt dicono che nessuna avrebbe dovuto esserci.",[10,402,403],{},"La documentazione di Bolt descrive il percorso previsto. Chiedi all’agente di\nintegrare OpenAI e, con le parole della documentazione, \"completerà il codice e\npoi mostrerà un messaggio che ti chiede di aggiungere il tuo secret\". Quel secret\nva nel pannello Secrets, dove solo una funzione server può leggerlo. Una funzione\nserver gira dal lato di Bolt, quindi il browser del visitatore non riceve mai la\nchiave. Costruita così, la chiave resta in magazzino.",[10,405,406,407,410,411,414,415,418,419,421,422,425],{},"La scorciatoia che possiamo indicare è la variabile d’ambiente. L’introduzione di\nBolt ai database dice che le variabili d’ambiente mantengono privati questi\nvalori, e due dei tre nomi che elenca, ",[14,408,409],{},"VITE_SUPABASE_URL"," e\n",[14,412,413],{},"VITE_SUPABASE_ANON_KEY",", iniziano con ",[14,416,417],{},"VITE_",". Quel prefisso appartiene a Vite,\nlo strumento di build, e la documentazione di Vite dice il contrario: una\nvariabile ",[14,420,417],{}," viene scritta nel codice che il browser scarica, e non deve\nmai contenere una chiave API. Per quei due nomi è innocuo, perché l’indirizzo di\nun progetto e una chiave pubblicabile sono fatti per essere pubblici. Copia lo\nstesso schema per ",[14,423,424],{},"VITE_OPENAI_API_KEY"," e la chiave è lì in vetrina.",[10,427,428,429,433],{},"Anche una chiave incollata in chat mentre sistemavi altro può finire scritta\ndirettamente in una pagina. In entrambi i casi il risultato è lo stesso file.\n",[77,430,432],{"href":431},"\u002Fblog\u002Fvite-and-next-public-env-vars","Come funziona il prefisso"," spiega quali\nvalori ci stanno dietro e quali mai.",[30,435,437],{"id":436},"_27-su-35-i-database-bolt-che-abbiamo-potuto-interrogare","27 su 35: i database Bolt che abbiamo potuto interrogare",[10,439,440],{},"Dei database Bolt che ci hanno dato una risposta utilizzabile, 27 su 35 hanno\nconsegnato righe a una richiesta senza alcun login. È un conteggio, e la base è\ntroppo piccola per stamparlo come percentuale.",[10,442,443],{},"I denominatori qui contano più che in qualsiasi altro punto di questo articolo.\n266 delle 1.123 app Bolt nominavano un progetto Supabase nel codice che\ndistribuiscono. Solo 35 di queste hanno risposto abbastanza bene da permetterci\ndi giudicare. Le altre 231 non si sono potute giudicare, il che le rende\nsconosciute, e non le abbiamo contate né come pulite né come esposte.",[222,445],{"alt":446,"caption":447,"src":448},"Quattro barre impilate che si restringono da sinistra a destra sulla stessa scala: 1.123 app Bolt, 266 che nominavano un progetto Supabase, 35 il cui database ha dato una risposta utilizzabile, e 27 che hanno restituito righe senza login. La terza barra prosegue come contorno tratteggiato fino alla larghezza della seconda, con un punto interrogativo e il numero 231. L’ultima barra è rossa.","Quattro denominatori. Il 27 è misurato sul 35, e le 231 che non abbiamo potuto giudicare sono disegnate come sconosciute invece di essere lasciate fuori.","\u002Fblog\u002Fis-bolt-safe\u002Fwhere-it-lands-1600x620.png",[10,450,451,452,187,455,458],{},"In 4 delle 27 la tabella che ha risposto aveva il nome tipico delle tabelle che\nparlano di persone, come ",[14,453,454],{},"users",[14,456,457],{},"profiles",". Quelle quattro e le undici app con\nuna chiave OpenAI o Anthropic fanno tutte le 15 D. Nelle altre 23 era una tabella\nche da fuori non potevamo identificare, forse un elenco di prodotti che doveva\nessere pubblico, forse tutt’altro.",[30,460,462],{"id":461},"perché-si-gioca-tutto-sul-database","Perché si gioca tutto sul database",[10,464,465],{},"Perché l’indirizzo del magazzino è scritto in vetrina, e deve esserlo.",[10,467,468],{},"Quando un’app Bolt legge i suoi dati dalla pagina, la pagina ha bisogno\ndell’indirizzo del database e di una chiave pubblicabile, quindi entrambi\nviaggiano fino a ogni visitatore. Che quella chiave sia pubblica è giusto; è da\nlì che entra la tua app. Cosa riceve in cambio lo decide un’impostazione per\ntabella chiamata Row Level Security. Attiva, con una policy scritta, la chiave\npubblica legge solo le righe che la policy consente. Disattivata, legge la\ntabella.",[10,470,471,472,475,476,479,480,484],{},"Supabase attiva la Row Level Security di default per le tabelle che crei\ncliccando nel suo Table Editor. Le tabelle create ",[22,473,474],{},"eseguendo SQL"," non la\nricevono, ed eseguire SQL è proprio il modo in cui un builder crea le tabelle per\nte. Attivarla è poi solo il primo passo, perché la policy che un assistente\nscrive per far sparire un errore di permessi è spesso ",[14,477,478],{},"using (true)",", che lascia\npassare tutti mentre la dashboard indica la tabella come protetta.\n",[77,481,483],{"href":482},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","La RLS è attiva e la tua tabella è ancora pubblica","\nracconta tutta questa storia.",[10,486,487,488,81],{},"Il controllo del database di Bolt cerca proprio questo: la sua documentazione lo\ndescrive come capace di trovare \"una policy di Row Level Security (RLS) mancante o\nun permesso troppo aperto\". La guida in linguaggio semplice per questa\npiattaforma è ",[77,489,491],{"href":490},"\u002Fis-your-bolt-app-safe","la tua app Bolt è sicura",[30,493,495],{"id":494},"cosa-controlla-laudit-di-sicurezza-di-bolt","Cosa controlla l’audit di sicurezza di Bolt",[10,497,498],{},"Legge il tuo progetto dall’interno, e parte quando premi il pulsante.",[10,500,501,502,505],{},"Bolt ha annunciato l’audit il 30 luglio 2026. Su un piano a pagamento sta nel\nmenu Publish come ",[22,503,504],{},"Run security audit",": esamina il tuo codice e il tuo\ndatabase, corregge da solo la maggior parte dei problemi, segnala il resto e non\nconsuma i tuoi token. Su ogni piano, compreso quello gratuito, le impostazioni di\nun database Bolt hanno una sezione Security che esegue il controllo di Row Level\nSecurity descritto sopra.",[10,507,508,509,512],{},"La nostra scansione è avvenuta due settimane dopo la comparsa di quel pulsante,\nquindi i numeri qui sopra non possono dire quanto abbia cambiato le cose da\nallora. Quello che possiamo dire è come i due punti di vista si incastrano.\nL’audit vede il tuo progetto dall’interno, comprese le tabelle che le tue pagine\nnon nominano mai, cosa che una scansione da fuori non può mai fare. Una scansione\nda fuori vede quello che uno sconosciuto ottiene dall’app pubblicata. Quando un\naudit finisce, il pulsante diventa ",[22,510,511],{},"Security audit up to date",", e la prossima\nmodifica che pubblichi è una modifica che non ha visto.",[10,514,515],{},"Lancia l’audit prima di pubblicare e guarda da fuori dopo. Se i due non sono\nd’accordo sul fatto che una tabella sia leggibile, fidati della risposta da\nfuori, perché è quella che ottiene uno sconosciuto.",[30,517,519],{"id":518},"come-controllare-la-tua-app-bolt","Come controllare la tua app Bolt",[10,521,522],{},"Cinque cose da guardare. Usa una finestra privata, così il tuo login non\nrisponde al posto di uno sconosciuto.",[41,524,525,531,537,546,552],{},[44,526,527,530],{},[22,528,529],{},"Scopri quale database hai."," I nuovi progetti Bolt usano un database Bolt\ndi default. Se hai scelto Supabase quando hai creato il progetto, o ne hai\ncollegato uno dopo, le tue tabelle stanno in un progetto Supabase a cui puoi\naccedere.",[44,532,533,536],{},[22,534,535],{},"Leggi la serratura di ogni tabella."," Con un database Bolt, apri la sezione\nSecurity nelle impostazioni del database e lancia il controllo. Con Supabase,\napri Authentication → Policies e scorri l’elenco: una tabella con la Row Level\nSecurity disattivata è leggibile da chiunque abbia l’indirizzo del tuo\nprogetto, e quell’indirizzo è nella tua app. Una policy che lascia passare\ntutti conta come disattivata.",[44,538,539,545],{},[22,540,541,542,544],{},"Cerca ",[14,543,417],{}," nel tuo progetto."," Ogni valore dietro quel prefisso è in\nvetrina. L’indirizzo di un progetto e una chiave pubblicabile ci stanno bene.\nUna chiave che ti costa soldi va nel pannello Secrets, letta da una funzione\nserver. Se una di queste è mai stata dietro il prefisso, ruotala prima dal\nfornitore, perché il vecchio valore continua a funzionare finché non lo fai.",[44,547,548,551],{},[22,549,550],{},"Guarda il tuo storage."," Un bucket segnato come pubblico elenca ogni suo\nfile a chiunque lo chieda, compresi quelli che la tua app non mostra mai.",[44,553,554,557,558,81],{},[22,555,556],{},"Oppure lascia fare alla scansione."," Fa tutto questo da fuori più altri\ncinque controlli, ci mette circa 20 secondi, non chiede un account e ti mostra\nun voto e cosa l’ha prodotto: ",[77,559,560],{"href":295},"scansiona la tua app gratis",[30,562,564],{"id":563},"perché-resti-così-dopo-la-pubblicazione","Perché resti così dopo la pubblicazione",[10,566,567,570],{},[22,568,569],{},"Un controllo del mese scorso descrive l’app del mese scorso."," Su Bolt\npubblicare è un pulsante, quindi una tabella aggiunta stamattina o una chiave\nincollata a mezzanotte è online appena lo premi.",[10,572,573],{},[22,574,575,579],{},[77,576,578],{"href":577},"\u002Fpricing","Reeve Monitor"," rifà i nove controlli per te:",[581,582,583,586,589,596],"ul",{},[44,584,585],{},"tutti e nove i controlli ogni ora, su un massimo di tre app",[44,587,588],{},"se l’app è raggiungibile, ogni 60 secondi",[44,590,591,592,595],{},"un messaggio quando un risultato ",[22,593,594],{},"cambia",", così un nuovo rilievo non aspetta che tu guardi",[44,597,598],{},"un rapporto mensile di quello che ha visto",[10,600,601],{},"Monitor costa €12 al mese a listino, con sette giorni gratis prima di addebitarti\nqualcosa. La pagina dei prezzi a volte è sotto la cifra indicata qui e mai sopra.",[10,603,604,612],{},[22,605,606,607,611],{},"Se la tua app Bolt tiene i dati nel tuo progetto Supabase,\n",[77,608,610],{"href":609},"\u002Fsupabase-backups","Reeve Care"," ne conserva una copia."," Vale per un progetto\ncollegato fin dall’inizio e per un database Bolt che hai rivendicato in\nSupabase.",[581,614,615,618,621,624,627],{},[44,616,617],{},"una copia cifrata del tuo database Supabase ogni notte, tenuta dove il tuo progetto non può arrivare",[44,619,620],{},"ogni copia verificata prima di contare, con il conteggio delle righe di ogni tabella",[44,622,623],{},"un ripristino con un clic quando ti serve",[44,625,626],{},"anche i tuoi file caricati, appena colleghi una credenziale di Storage",[44,628,629],{},"tutto ciò che fa Monitor",[10,631,632],{},"Care costa €49 al mese a listino per un’app, con gli stessi sette giorni gratis.",[10,634,635,636,640],{},"Una tabella aperta è qualcosa che uno sconosciuto può leggere. Una migrazione\nandata nel verso sbagliato, o un agente con accesso al database, è qualcosa che\npuò svuotarla, e nessuno dei nove controlli di questo articolo riporterebbe\nindietro le righe.\n",[77,637,639],{"href":638},"\u002Fblog\u002Fai-agent-deleted-my-database","Il giorno in cui un agente IA ha cancellato un database di produzione","\nmostra com’è vista da dentro.",[30,642,644],{"id":643},"cosa-fare-questa-settimana","Cosa fare questa settimana",[646,647,648],"key-takeaways",{},[581,649,650,655,658,661,664],{},[44,651,541,652,654],{},[14,653,417],{}," nel tuo progetto Bolt e leggi ogni valore dietro. Una chiave che ti costa soldi va nel pannello Secrets, letta da una funzione server.",[44,656,657],{},"Se una chiave OpenAI o un’altra chiave a pagamento è mai stata in quell’elenco, ruotala dal fornitore prima di toglierla dal codice.",[44,659,660],{},"Lancia il controllo di sicurezza del database, oppure apri Authentication → Policies in Supabase, e leggi la serratura di ogni tabella. Una policy che lascia passare tutti lascia la tabella aperta.",[44,662,663],{},"Lancia l’audit di Bolt prima di pubblicare, poi controlla da fuori l’app pubblicata.",[44,665,666],{},"Tieni una copia del tuo database dove il tuo progetto e il tuo agente non possono arrivare, e verifica che la copia si ripristini.",[10,668,669,670,672,673,677],{},"Comincia dalla ricerca di ",[14,671,417],{},", perché è l’unico rilievo su Bolt che costa\nsoldi da solo. Se stai ancora scegliendo tra un builder e l’altro,\n",[77,674,676],{"href":675},"\u002Fblog\u002Fsafest-ai-app-builder","qual è il builder di app IA più sicuro"," mette i\ncinque uno accanto all’altro.",{"title":679,"searchDepth":680,"depth":680,"links":681},"",3,[682,684,685,686,687,688,689,690,691,692,693],{"id":32,"depth":683,"text":33},2,{"id":67,"depth":683,"text":68},{"id":245,"depth":683,"text":246},{"id":299,"depth":683,"text":300},{"id":396,"depth":683,"text":397},{"id":436,"depth":683,"text":437},{"id":461,"depth":683,"text":462},{"id":494,"depth":683,"text":495},{"id":518,"depth":683,"text":519},{"id":563,"depth":683,"text":564},{"id":643,"depth":683,"text":644},"Basi della sicurezza","\u002Fblog\u002Fis-bolt-safe\u002Fcover-1200x630.png","Un’app come vetrina con il logo Bolt per insegna, una chiave rossa dentro, un database chiuso dietro e un passante fuori.","Bolt è sicuro? Abbiamo passato 1.123 app Bolt online per nove controlli. L’hosting era pulito. I rilievi erano chiavi e tabelle aperte dentro le app.",false,"md",[701,704,707,709,712],{"q":702,"a":703},"Bolt è sicuro da usare?","Per la parte che controlla Bolt, i nostri numeri dicono di sì. Su 1.123 app online su bolt.host non abbiamo trovato certificati difettosi né domini vicini alla scadenza, 13 app pubblicavano le source map e una lasciava chiamare la sua API da qualsiasi sito. Quello che decide la tua app sta dentro di lei: se una chiave che ti costa soldi è finita nel codice che i visitatori scaricano, e se le tue tabelle rispondono a uno sconosciuto. Sono due impostazioni che puoi controllare da solo.",{"q":705,"a":706},"Le app Bolt sono sicure di default?","Le parti che Bolt pubblica per te sono uscite pulite dalla nostra scansione. Il resto dipende da cosa è successo in chat. Bolt dovrebbe tenere una chiave API a pagamento nel pannello Secrets, dietro una funzione server, e ha un controllo del database che cerca una Row Level Security mancante. Nessuno dei due parte da solo: l’audit del progetto è un pulsante nel menu Publish dei piani a pagamento, e il controllo del database è una sezione che apri tu. Ad agosto 2026, 75 app Bolt su 1.123 avevano qualcosa con la forma di una chiave nel front end, e 27 dei 35 database che abbiamo potuto interrogare hanno risposto a uno sconosciuto.",{"q":397,"a":708},"Da fuori non vediamo come una singola chiave sia arrivata lì. La strada che possiamo indicare è la variabile d’ambiente. Una variabile il cui nome inizia con VITE_ viene scritta nel JavaScript che ogni visitatore scarica, e Vite, lo strumento di build dietro quel prefisso, dice che variabili del genere non devono mai contenere una chiave API. Per l’indirizzo di un progetto o una chiave pubblicabile è innocuo. Per una chiave OpenAI è una bolletta. Dieci delle 1.123 app Bolt che abbiamo scansionato ne distribuivano una.",{"q":710,"a":711},"I miei dati Supabase sono al sicuro in un’app Bolt?","Dipende da un’impostazione per tabella. Quando un’app Bolt parla con Supabase dalla pagina, usa una chiave pubblicabile fatta per essere pubblica, quindi è solo la Row Level Security a decidere cosa riceve uno sconosciuto. Abbiamo potuto chiedere righe a 35 database Bolt senza login, e 27 le hanno consegnate. È un conteggio, e la base è troppo piccola per trasformarlo in una percentuale. Le tue policy le leggi in pochi minuti.",{"q":713,"a":714},"Bolt è più sicuro di Lovable?","Sul lato piattaforma sono alla pari: 13 app Bolt su 1.123 e 225 app Lovable su 18.553 pubblicavano source map, poco più di una su cento in entrambi i casi, e nessuna aveva problemi di certificato o di dominio. La differenza erano le chiavi. Dieci delle 1.123 app Bolt avevano una chiave OpenAI, contro 18 su 18.554 su Lovable. Dieci è un numero piccolo, quindi leggilo come una direzione. Il confronto completo dei cinque builder è in un articolo a parte.","\u002Fblog\u002Fis-bolt-safe\u002Fcard-800x500.png",[717,718,719,720,721,722,723,724],"bolt è sicuro","sicurezza bolt.new","bolt.new è sicuro","sicurezza app bolt","le app bolt sono sicure","sicurezza bolt supabase","problemi di sicurezza bolt","sicurezza deploy bolt",{},true,"\u002Fblog\u002Fis-bolt-safe","2026-10-02",{"title":5,"description":697},"blog\u002Fis-bolt-safe",[732,733,734],"Bolt è sicuro? Per tutto ciò che decide Bolt stesso, sì. Su 1.123 app Bolt online ne abbiamo trovate 13 che pubblicano le source map, una che lasciava chiamare la sua API da qualsiasi sito, e nemmeno un certificato difettoso.","75 di quelle app distribuivano qualcosa con la forma di una chiave nel codice che un visitatore scarica. Quasi tutte erano chiavi Google, che di solito vanno bene. Dieci erano chiavi OpenAI, e chi ne trova una può spenderla.","Dei 35 database Bolt che abbiamo potuto davvero interrogare, 27 hanno restituito righe a una richiesta senza login. Entrambi i problemi sono impostazioni del tuo progetto.","BoQKfM1ZpBazT2aIp2j8VFlZ5sIANQkAkKbahp5rmmo",[737,743,749,755,761,767,773,779,785,791,792,798,804,810,817,823,829,834,840,846,852,858,864,870,876,881,887,893,899,905,911,917,922,928,934,940,946,952,958,963,968,974,980,986,992,998,1004,1010,1015,1021,1027,1033,1038,1043,1049,1053,1059,1065,1070,1075,1081],{"path":738,"title":739,"description":740,"published":741,"category":694,"image":742,"draft":698},"\u002Fblog\u002Fstorage-upload-violates-row-level-security","\"Row-level security policy for table objects\" in upload","\"New row violates row-level security policy for table objects\" vuol dire che al tuo upload manca una regola insert. Rendere pubblico il bucket non ne aggiunge.","2026-10-11","\u002Fblog\u002Fstorage-upload-violates-row-level-security\u002Fcard-800x500.png",{"path":744,"title":745,"description":746,"published":747,"category":694,"image":748,"draft":698},"\u002Fblog\u002Fbase44-security-scan","Scansione di sicurezza Base44: ciò che vede solo lei","La scansione di sicurezza Base44 controlla sette tipi di problema dall’interno. Ecco la metà che legge e che nessun altro legge, e quella che non guarda mai.","2026-10-10","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",{"path":750,"title":751,"description":752,"published":753,"category":694,"image":754,"draft":698},"\u002Fblog\u002Fapi-key-leaked-what-to-do","La tua chiave API è trapelata. L'ordine in cui muoverti","Una chiave API è trapelata e non sai da cosa cominciare. Non tutte le chiavi nel frontend lo sono, e l'ordine conta più della velocità.","2026-10-09","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fcard-800x500.png",{"path":756,"title":757,"description":758,"published":759,"category":694,"image":760,"draft":698},"\u002Fblog\u002Finfinite-recursion-in-policy-for-relation","\"Infinite recursion detected in policy\" senza disattivare RLS","\"Infinite recursion detected in policy for relation\" significa che la tua policy ha interrogato la tabella che protegge. Ecco come rompere il cerchio.","2026-10-08","\u002Fblog\u002Finfinite-recursion-in-policy-for-relation\u002Fcard-800x500.png",{"path":762,"title":763,"description":764,"published":765,"category":694,"image":766,"draft":698},"\u002Fblog\u002Fno-api-key-found-in-request","\"No API key found in request\" su Supabase, e la correzione sbagliata","\"No API key found in request\" significa che la tua richiesta è arrivata a Supabase senza chiave. Quasi tutte le risposte indicano le regole del database.","2026-10-07","\u002Fblog\u002Fno-api-key-found-in-request\u002Fcard-800x500.png",{"path":768,"title":769,"description":770,"published":771,"category":694,"image":772,"draft":698},"\u002Fblog\u002Fis-base44-safe","Base44 è sicuro? Cosa abbiamo trovato in 5.442 app","Base44 è sicuro? Abbiamo passato nove controlli su 5.442 app Base44 online. Quasi tutte hanno preso B, per motivi che il proprietario non ha mai scelto.","2026-10-06","\u002Fblog\u002Fis-base44-safe\u002Fcard-800x500.png",{"path":774,"title":775,"description":776,"published":777,"category":694,"image":778,"draft":698},"\u002Fblog\u002Fmove-a-secret-to-an-edge-function","Nascondere una chiave API: spostala in una Edge Function Supabase","Nascondere una chiave API vuol dire toglierla dal browser, e una Edge Function Supabase è il posto più piccolo dove metterla. Due passaggi contano di più.","2026-10-05","\u002Fblog\u002Fmove-a-secret-to-an-edge-function\u002Fcard-800x500.png",{"path":780,"title":781,"description":782,"published":783,"category":694,"image":784,"draft":698},"\u002Fblog\u002Fenv-file-exposed-on-your-server","Il tuo file .env è esposto? I dodici percorsi da provare","Il tuo file .env è esposto sul tuo server web? Dodici indirizzi te lo dicono, e una risposta significa che tutto quello che contiene è già pubblico.","2026-10-04","\u002Fblog\u002Fenv-file-exposed-on-your-server\u002Fcard-800x500.png",{"path":786,"title":787,"description":788,"published":789,"category":694,"image":790,"draft":698},"\u002Fblog\u002Fis-v0-safe","Sicurezza di v0: tutte le 1.790 app v0 analizzate hanno preso A","La sicurezza di v0 misurata su 1.790 app v0 online: tutte hanno preso A. Solo 17 nominavano un database, ed è soprattutto questo che misura quella A.","2026-10-03","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",{"path":727,"title":5,"description":697,"published":728,"category":694,"image":715,"draft":698},{"path":793,"title":794,"description":795,"published":796,"category":694,"image":797,"draft":698},"\u002Fblog\u002Fis-supabase-down-or-your-app","Supabase è down o è la tua app? Come capirlo","Supabase è down o è la tua app? Un progetto in pausa, un database pieno e un tuo errore sembrano la stessa cosa. Quattro controlli li separano.","2026-10-01","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fcard-800x500.png",{"path":799,"title":800,"description":801,"published":802,"category":694,"image":803,"draft":698},"\u002Fblog\u002Fdoes-supabase-encrypt-my-data","Supabase crittografa i miei dati? Sì. Ecco da cosa protegge","Supabase crittografa i dati? Sì: AES-256 a riposo, TLS in transito, SOC 2 e ISO 27001. Cosa copre ciascuno, e la fuga di dati che nessuno di questi ferma.","2026-09-30","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fcard-800x500.png",{"path":805,"title":806,"description":807,"published":808,"category":694,"image":809,"draft":698},"\u002Fblog\u002Fsupabase-free-plan-limits","Supabase: prezzi e limiti del piano gratuito, uno per uno","Prezzi e limiti del piano gratuito di Supabase: 500 MB di database, 5 GB di egress e nessun backup. Cosa succede a ogni soglia e cosa cambia Pro a $25.","2026-09-29","\u002Fblog\u002Fsupabase-free-plan-limits\u002Fcard-800x500.png",{"path":811,"title":812,"description":813,"published":814,"category":815,"image":816,"draft":698},"\u002Fblog\u002Ftest-your-supabase-backup","Testa il tuo backup di Supabase prima del giorno in cui serve","Come testare il tuo backup di Supabase: ripristinarlo in un progetto di prova, contare le righe, accedere e cercare la riga che manca a un file troncato.","2026-09-28","Backups","\u002Fblog\u002Ftest-your-supabase-backup\u002Fcard-800x500.png",{"path":818,"title":819,"description":820,"published":821,"category":815,"image":822,"draft":698},"\u002Fblog\u002Fsupabase-backup-github-action","Backup gratis di Supabase con una GitHub Action, e il tranello","Un backup di Supabase con una GitHub Action è gratis e va bene per molte app. Il workflow, la connection string giusta e l'egress di ogni esecuzione.","2026-09-27","\u002Fblog\u002Fsupabase-backup-github-action\u002Fcard-800x500.png",{"path":824,"title":825,"description":826,"published":827,"category":815,"image":828,"draft":698},"\u002Fblog\u002Fdownload-your-supabase-backup","Perché non puoi scaricare il tuo backup di Supabase","Non puoi scaricare il tuo backup di Supabase su un progetto recente, perché la copia giornaliera è uno snapshot fisico. Come verificarlo e tenere una copia tua.","2026-09-26","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcard-800x500.png",{"path":830,"title":831,"description":832,"published":827,"category":694,"image":833,"draft":698},"\u002Fblog\u002Fsupabase-permission-denied-for-table","Supabase \"permission denied for table\": il grant mancante","Dal 30 ottobre una nuova tabella di Supabase risponde \"permission denied for table\" finché non concedi l'accesso. Il grant della mail è metà della soluzione.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcard-800x500.png",{"path":835,"title":836,"description":837,"published":838,"category":694,"image":839,"draft":698},"\u002Fblog\u002Fopen-api-endpoint-exposed","Un endpoint API aperto è un problema di sicurezza? Leggi il JSON","La tua scansione ha segnalato un endpoint API aperto. Quanto conti dipende da che cosa è tornato, e la maggior parte di quelli trovati era della piattaforma.","2026-09-25","\u002Fblog\u002Fopen-api-endpoint-exposed\u002Fcard-800x500.png",{"path":841,"title":842,"description":843,"published":844,"category":694,"image":845,"draft":698},"\u002Fblog\u002Flovable-security-scan","Scansione di sicurezza Lovable: cosa non può dimostrare","Scansione di sicurezza Lovable: cosa controllano Quick scan e Deep scan, quando parte ciascuno, e l’unica cosa che nessuna scansione dall’interno dimostra.","2026-09-24","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",{"path":847,"title":848,"description":849,"published":850,"category":815,"image":851,"draft":698},"\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","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":853,"title":854,"description":855,"published":856,"category":694,"image":857,"draft":698},"\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":859,"title":860,"description":861,"published":862,"category":694,"image":863,"draft":698},"\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":865,"title":866,"description":867,"published":868,"category":694,"image":869,"draft":698},"\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":871,"title":872,"description":873,"published":874,"category":694,"image":875,"draft":698},"\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":431,"title":877,"description":878,"published":879,"category":694,"image":880,"draft":698},"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":882,"title":883,"description":884,"published":885,"category":694,"image":886,"draft":698},"\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":888,"title":889,"description":890,"published":891,"category":694,"image":892,"draft":698},"\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":894,"title":895,"description":896,"published":897,"category":694,"image":898,"draft":698},"\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":900,"title":901,"description":902,"published":903,"category":815,"image":904,"draft":698},"\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":906,"title":907,"description":908,"published":909,"category":815,"image":910,"draft":698},"\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":912,"title":913,"description":914,"published":915,"category":815,"image":916,"draft":698},"\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":675,"title":918,"description":919,"published":920,"category":694,"image":921,"draft":698},"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":923,"title":924,"description":925,"published":926,"category":694,"image":927,"draft":698},"\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":929,"title":930,"description":931,"published":932,"category":694,"image":933,"draft":698},"\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":935,"title":936,"description":937,"published":938,"category":694,"image":939,"draft":698},"\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":941,"title":942,"description":943,"published":944,"category":694,"image":945,"draft":698},"\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":947,"title":948,"description":949,"published":950,"category":694,"image":951,"draft":698},"\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":953,"title":954,"description":955,"published":956,"category":694,"image":957,"draft":698},"\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":236,"title":959,"description":960,"published":961,"category":694,"image":962,"draft":698},"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":379,"title":964,"description":965,"published":966,"category":694,"image":967,"draft":698},"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":969,"title":970,"description":971,"published":972,"category":694,"image":973,"draft":698},"\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":975,"title":976,"description":977,"published":978,"category":815,"image":979,"draft":698},"\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":981,"title":982,"description":983,"published":984,"category":694,"image":985,"draft":698},"\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":987,"title":988,"description":989,"published":990,"category":815,"image":991,"draft":698},"\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":993,"title":994,"description":995,"published":996,"category":694,"image":997,"draft":698},"\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":999,"title":1000,"description":1001,"published":1002,"category":694,"image":1003,"draft":698},"\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":1005,"title":1006,"description":1007,"published":1008,"category":694,"image":1009,"draft":698},"\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":268,"title":1011,"description":1012,"published":1013,"category":694,"image":1014,"draft":698},"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":1016,"title":1017,"description":1018,"published":1019,"category":815,"image":1020,"draft":698},"\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":1022,"title":1023,"description":1024,"published":1025,"category":815,"image":1026,"draft":698},"\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":1028,"title":1029,"description":1030,"published":1031,"category":694,"image":1032,"draft":698},"\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":372,"title":1034,"description":1035,"published":1036,"category":694,"image":1037,"draft":698},"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":638,"title":1039,"description":1040,"published":1041,"category":815,"image":1042,"draft":698},"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":1044,"title":1045,"description":1046,"published":1047,"category":694,"image":1048,"draft":698},"\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":258,"title":1050,"description":1051,"published":1047,"category":694,"image":1052,"draft":698},"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":1054,"title":1055,"description":1056,"published":1057,"category":694,"image":1058,"draft":698},"\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":1060,"title":1061,"description":1062,"published":1063,"category":815,"image":1064,"draft":698},"\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":482,"title":1066,"description":1067,"published":1068,"category":694,"image":1069,"draft":698},"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":1071,"title":1072,"description":1073,"published":1068,"category":815,"image":1074,"draft":698},"\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":1076,"title":1077,"description":1078,"published":1079,"category":815,"image":1080,"draft":698},"\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":1082,"title":1083,"description":1084,"published":1079,"category":694,"image":1085,"draft":698},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","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",1791705965135]