[{"data":1,"prerenderedAt":305},["ShallowReactive",2],{"blog-it-source-maps-exposed-in-production":3},{"id":4,"title":5,"body":6,"category":262,"cover":263,"coverAlt":263,"description":264,"draft":265,"extension":266,"faq":267,"image":283,"keywords":284,"meta":292,"navigation":293,"ogTitle":294,"path":295,"published":296,"seo":297,"stem":298,"tldr":299,"updated":296,"__hash__":304},"blog_it\u002Fblog\u002Fsource-maps-exposed-in-production.md","Source map esposte: la tua app sta pubblicando il codice originale",{"type":7,"value":8,"toc":251},"minimark",[9,13,16,21,24,27,30,44,48,51,54,65,71,74,78,81,107,110,118,122,125,128,136,139,143,146,149,154,161,165,168,171,181,196,203,207,235,243],[10,11,12],"p",{},"Hai scansionato la tua app, e una riga del rapporto dice che il tuo codice\nsorgente originale è pubblicato. Oppure qualcuno di tecnico ha premuto F12 sul\ntuo sito e ti ha detto che le tue source map sono esposte. In entrambi i casi\nsuona male in un modo preciso e personale: la cosa a cui hai lavorato per mesi\nsta, a quanto pare, in bella vista, commenti compresi.",[10,14,15],{},"La lettura allarmata e l'alzata di spalle sbagliano entrambe. Una source map\nnon è un segreto. È una mappa (il nome è letterale) verso il punto in cui\nstarebbero i tuoi segreti, se qualcuno è mai finito nel tuo codice. Se la tua\nconta dipende da cosa c'è dentro, e controllarlo richiede circa 30 secondi.",[17,18,20],"h2",{"id":19},"è-grave-che-le-tue-source-map-siano-esposte","È grave che le tue source map siano esposte?",[10,22,23],{},"È qualcosa da sistemare questa settimana. È raramente un motivo per andare nel\npanico stanotte.",[10,25,26],{},"Ciò che una source map esposta rivela è codice, e la tua app consegna già il\nsuo codice a ogni visitatore, compresso in un blocco illeggibile, ma presente,\nperché il web funziona così. Un estraneo paziente, con gli strumenti giusti,\npotrebbe ricostruirne una versione approssimativa dal solo file compresso. La\nmappa elimina il requisito della pazienza: con lei, chiunque prema F12 legge il\ntuo progetto ordinato come appare nel tuo editor.",[10,28,29],{},"Il nostro scanner classifica una source map pubblicata come media, il centro\ndella scala di gravità, e quella collocazione è voluta. Da solo, il codice\nleggibile è una perdita di riservatezza: qualcuno può studiare come funziona la\ntua app, leggere le tue funzioni a metà, prendere in prestito le tue idee.\nSgradevole, e per un'app il cui valore è un prompt ingegnoso o un flusso\ninsolito, un vero problema di business. Non una cassa aperta.",[10,31,32,33,38,39,43],{},"Il peso cambia il giorno in cui il tuo codice contiene qualcosa che non avrebbe\nmai dovuto essere codice. Una chiave che gira come parte della tua app finisce\nanche nel file compresso. La mappa la rende più facile da trovare, ma era già\npubblicata, e quello è\n",[34,35,37],"a",{"href":36},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","un riscontro a parte, più grave",".\nI commenti sono diversi. La compressione li cancella da ciò che viene\nconsegnato, quindi la mappa è l'unico posto pubblico in cui un commento esiste.\nUna password in una riga commentata, una nota ",[40,41,42],"code",{},"remove before launch"," sopra la\ncosa che non è mai stata rimossa, un indirizzo interno annotato accanto alla\nfunzione che lo chiama: niente di tutto questo è raggiungibile da un estraneo\nse non nella mappa.",[17,45,47],{"id":46},"cosè-davvero-una-source-map","Cos'è davvero una source map",[10,49,50],{},"È la traduzione tra il codice che il tuo sito consegna e il codice che hai\nscritto tu.",[10,52,53],{},"Quando la tua app viene pubblicata, il passaggio di build comprime il tuo\ncodice: tutti i file schiacciati insieme, ogni nome accorciato a una o due\nlettere, ogni commento rimosso, il tutto su un'unica riga enorme. I browser lo\neseguono senza lamentarsi. Nessuno può leggerlo, nemmeno gli strumenti che lo\nhanno costruito, e questo diventa un problema nel momento in cui qualcosa si\nrompe e l'errore punta alla riga 1, carattere 48.120, di un file che nessun\nessere umano ha mai visto.",[10,55,56,57,60,61,64],{},"Così gli strumenti di build scrivono un secondo file, la source map. Sta\naccanto a quello compresso (",[40,58,59],{},"app.js"," riceve ",[40,62,63],{},"app.js.map",") e contiene tutto\nciò che la compressione ha buttato: i tuoi file originali, i loro nomi, la loro\nstruttura di cartelle e ogni commento. L'ultima riga del file compresso porta\nl'indirizzo della mappa, e un browser la scarica quando si aprono i suoi\nstrumenti per sviluppatori. Tutto qui il disegno. Esiste perché un errore possa\npuntare al codice che hai scritto davvero.",[66,67],"diagram",{"alt":68,"caption":69,"src":70},"A sinistra, un file bundle compresso disegnato come un muro di trattini illeggibili, con sotto il suo file di source map. Una freccia porta a destra alla stessa app resa leggibile: una cartella src, file di componenti e righe di codice in cui due righe di commento sono evidenziate in ambra.","Il file compresso è ciò che i tuoi visitatori eseguono. La mappa lo ritrasforma nel progetto che hai scritto. I commenti, tolti dal bundle, esistono solo sul lato leggibile.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fwhat-the-map-reveals-1600x720.png",[10,72,73],{},"Da quel disegno seguono due cose. I tuoi visitatori non scaricano mai la\nmappa (un browser la chiede solo quando si aprono gli strumenti per\nsviluppatori), quindi una mappa pubblicata non costa nulla, non cambia nulla\nsullo schermo e non si annuncia mai. E qualunque cosa possa aprire il tuo sito\npuò scaricare la mappa, perché l'indirizzo è scritto nella pagina e davanti non\nc'è nessun login. Che il file sia lì è un'impostazione di build, e da fuori,\naccesa appare identica a spenta finché qualcuno non va a guardare.",[17,75,77],{"id":76},"come-controllare-la-tua-app-in-30-secondi","Come controllare la tua app in 30 secondi",[10,79,80],{},"Sulla tua app online, l'indirizzo pubblicato che visitano i tuoi utenti, non\nl'anteprima dentro il tuo builder:",[82,83,84,88,96],"ol",{},[85,86,87],"li",{},"Apri l'app in Chrome, Edge o Firefox e premi F12. Si aprono gli strumenti\nper sviluppatori del browser, lo stesso pannello che userebbe un estraneo.",[85,89,90,91,95],{},"Clicca sulla scheda ",[92,93,94],"strong",{},"Sources",", in alto nel pannello.",[85,97,98,99,102,103,106],{},"Leggi l'albero dei file a sinistra. Il codice compresso appare come uno o\ndue file con nomi tipo ",[40,100,101],{},"index-4f81ab2c.js",". Le source map appaiono come il\ntuo progetto: una cartella chiamata ",[40,104,105],{},"src",", file con i nomi delle tue pagine\ne dei tuoi componenti, e dentro codice che puoi leggere davvero.",[10,108,109],{},"Se lì puoi aprire un file e vedere i tuoi stessi commenti, le tue source map\nsono pubblicate. Il browser disegna quell'albero solo perché ha scaricato la\nmappa dal tuo sito online, esattamente come farebbe il browser di chiunque\naltro.",[10,111,112,113,117],{},"Se preferisci non frugare tra i pannelli, il nostro scan gratuito legge il tuo\nsito online da fuori e riporta questo controllo insieme ad altri otto:\n",[34,114,116],{"href":115},"\u002F#scan","scansiona la tua app",". Richiede una ventina di secondi e non serve un\naccount.",[17,119,121],{"id":120},"cosa-può-vedere-un-estraneo-e-cosa-no","Cosa può vedere un estraneo, e cosa no",[10,123,124],{},"Tutto ciò che hai scritto dentro l'app stessa, e nulla oltre.",[10,126,127],{},"Le source map pubblicate rivelano il tuo frontend: le tue pagine, i tuoi\ncomponenti, la logica che gira nel browser, i nomi delle route che la tua app\nchiama, ogni prompt che hai scritto dentro l'app e ogni commento.",[10,129,130,131,135],{},"Non arrivano al tuo server. Il codice che gira in una edge function o in un\nbackend resta dov'è. Non aprono nemmeno il tuo database. Se un estraneo può\nleggere le tue tabelle lo decidono le regole su ciascuna tabella, non la\nvisibilità del tuo codice, e\n",[34,132,134],{"href":133},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","quella domanda l'abbiamo misurata a parte","\nsulle stesse app.",[10,137,138],{},"In pratica, il danno di una mappa pubblicata arriva come lettura silenziosa,\nnon come un'irruzione clamorosa: qualcuno studia la tua logica di pagamento in\ncerca di un modo per aggirarla, o trova una route di amministrazione che\nnessuno ha mai collegato e la prova. Ognuna di queste cose diventa un problema\nsolo se ciò che è stato trovato non era protetto. La mappa è una guida per\nl'estraneo; non è lei la porta aperta.",[17,140,142],{"id":141},"quanto-spesso-spuntano-source-map-pubblicate","Quanto spesso spuntano source map pubblicate",[10,144,145],{},"Ad agosto 2026 abbiamo scansionato 30.998 app online pubblicate da Lovable,\nBase44, Replit, v0 e Bolt. Una su otto (il 13%) serviva almeno una source map\nfunzionante.",[10,147,148],{},"Contiamo una mappa solo quando risponde davvero. L'indirizzo in fondo a un file\ncompresso non prova nulla da solo, perché molte build scrivono l'indirizzo e\nnon caricano mai il file; il nostro scanner lo segue e verifica che torni una\nmappa vera. E dove il controllo non è potuto arrivare in fondo, abbiamo\nregistrato che non è potuto arrivare in fondo. Un'app che non siamo riusciti a\ncontrollare è sconosciuta, non pulita.",[66,150],{"alt":151,"caption":152,"src":153},"Un file bundle compresso che termina con la riga sourceMappingURL=index-4f81.js.map, con due esiti possibili disegnati sotto. In uno, la richiesta della mappa restituisce 200 con un file JSON e porta una croce ambra: il codice è pubblicato. Nell'altro restituisce 404, segnato con una spunta verde.","L'indirizzo da solo non prova nulla. Il riscontro è una mappa che risponde. Un 404 a quell'indirizzo significa che l'impostazione è spenta, qualunque cosa dica l'ultima riga del bundle.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fdoes-the-map-answer-1600x640.png",[10,155,156,157,160],{},"Altri due numeri dello stesso giro rimettono questo al suo posto. La fuga di\ncui i proprietari vengono avvisati più spesso (una chiave segreta nella\npagina, del tipo che ignora ogni regola del database) è comparsa 3 volte in\nquelle 30.998 app. E una tabella di database leggibile da qualunque estraneo è\ncomparsa in\n",[34,158,159],{"href":133},"più della metà delle app in cui quel controllo è arrivato in fondo",".\nLe source map esposte stanno in mezzo: molto più comuni della fuga famosa,\nmolto meno direttamente dannose della tabella aperta. Che è esattamente ciò che\nuna gravità media sta cercando di dirti.",[17,162,164],{"id":163},"come-spegnere-le-source-map-in-produzione","Come spegnere le source map in produzione",[10,166,167],{},"Un'impostazione di build, poi un nuovo deploy.",[10,169,170],{},"Se la tua app l'ha fatta un builder, diglielo in parole semplici, in inglese,\ndove i builder sono più affidabili:",[172,173,178],"pre",{"className":174,"code":176,"language":177},[175],"language-text","Disable source map generation for production builds and redeploy.\n","text",[40,179,176],{"__ignoreMap":180},"",[10,182,183,184,187,188,191,192,195],{},"Se gestisci tu il codice, l'impostazione vive nella configurazione di build. In\nun progetto Vite (che è ciò che sta sotto la maggior parte delle app Lovable e\nBolt) è ",[40,185,186],{},"build.sourcemap: false"," in ",[40,189,190],{},"vite.config","; un'app Nuxt ha la sua\nopzione ",[40,193,194],{},"sourcemap",". Ridistribuisci, poi ripeti il controllo da 30 secondi:\nl'albero di file leggibile sotto Sources dovrebbe essere sparito, e dovrebbero\nrestare solo i nomi compressi.",[10,197,198,199,202],{},"Due code prima di archiviare la faccenda. Spegnere le mappe non richiama le\ncopie. Chiunque abbia scaricato la tua mappa mentre era su ha il tuo codice\ncom'era quel giorno. Quindi leggi il tuo stesso codice prima di rilassarti: se\nda qualche parte c'è scritta una chiave, una password o qualsiasi altra cosa\nche non dovrebbe essere pubblica,\n",[34,200,201],{"href":36},"ruotala adesso","; togliere la\nmappa chiude la porta ai nuovi lettori, non a ciò che è già stato copiato. E\nl'impostazione può tornare: un aggiornamento di template, una configurazione\nrigenerata o una nuova destinazione di deploy può riaccendere le mappe senza\nche tu abbia toccato nulla.",[17,204,206],{"id":205},"cosa-fare-adesso","Cosa fare adesso",[208,209,210],"key-takeaways",{},[211,212,213,219,226,229,232],"ul",{},[85,214,215,216,218],{},"Premi F12 sulla tua app online, apri Sources e cerca una cartella chiamata ",[40,217,105],{},". File leggibili con i tuoi stessi commenti significano che le tue source map sono pubblicate.",[85,220,221,222,225],{},"Spegnile con un'istruzione al tuo builder (disable source maps for production builds and redeploy) oppure imposta tu ",[40,223,224],{},"sourcemap: false"," nella configurazione di build.",[85,227,228],{},"Leggi cosa stava rivelando la mappa prima di rilassarti. Una chiave o una password in un punto qualsiasi del tuo codice significa ruotarla oggi, perché togliere la mappa non riprende le copie già fatte.",[85,230,231],{},"Lascia in pace le source map di sviluppo. Stanno facendo il loro lavoro, e in discussione c'è solo il sito pubblicato.",[85,233,234],{},"Ripeti il controllo da 30 secondi dopo gli aggiornamenti di template e i deploy grandi. Questa impostazione ha il vizio di riaccendersi da sola.",[10,236,237,238,242],{},"È quest'ultima abitudine quella che scivola, perché niente sembra diverso\nquando la risposta cambia. Reeve Care riesegue questo stesso scan contro la tua\napp online secondo un calendario, questo controllo incluso, e ti scrive quando\nun risultato peggiora: ",[34,239,241],{"href":240},"\u002F#pricing","cosa sorveglia e quanto costa",".",[10,244,245,246,250],{},"Se preferisci chiudere tutto in una volta sola, la\n",[34,247,249],{"href":248},"\u002Fchecklist","checklist di sicurezza da 10 minuti"," copre questo insieme alle\naltre porte che meritano uno sguardo in un'app appena lanciata.",{"title":180,"searchDepth":252,"depth":252,"links":253},3,[254,256,257,258,259,260,261],{"id":19,"depth":255,"text":20},2,{"id":46,"depth":255,"text":47},{"id":76,"depth":255,"text":77},{"id":120,"depth":255,"text":121},{"id":141,"depth":255,"text":142},{"id":163,"depth":255,"text":164},{"id":205,"depth":255,"text":206},"Basi della sicurezza",null,"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.",false,"md",[268,271,274,277,280],{"q":269,"a":270},"Mi hanno detto che le mie source map sono esposte. È una violazione di dati?","No. Una source map contiene il tuo codice, non i dati dei tuoi utenti. Il tuo database non ci sta dentro, e nemmeno nulla del tuo server. Diventa serio solo quando il codice stesso contiene qualcosa di segreto: una chiave, una password, un indirizzo interno. Leggi cosa c'è scritto davvero nella tua prima di decidere quanto è brutta la notizia.",{"q":272,"a":273},"Possono rubarmi l'app se le mie source map sono pubbliche?","Possono leggere il tuo codice frontend (pagine, componenti, logica del browser e commenti), e questo rende copiare le idee della tua app più facile di quanto già fosse. Non ottengono il tuo codice server, il tuo database o i tuoi utenti. Per la maggior parte delle app il rischio concreto non è il furto del codice; è il segreto finito scritto nel codice lungo la strada.",{"q":275,"a":276},"Come tolgo le source map dalla mia build di produzione?","Dillo al tuo builder in parole semplici: disable source map generation for production builds and redeploy. Se gestisci tu il codice, l'impostazione sta nella configurazione di build: in un progetto Vite è build.sourcemap in vite.config; mettila a false e ridistribuisci. Poi ricontrolla con F12: l'albero di file leggibile sotto Sources dovrebbe essere sparito.",{"q":278,"a":279},"Le source map in sviluppo sono un problema anche loro?","No. Le source map esistono per lo sviluppo. Sono ciò che fa puntare un errore al vero file e alla vera riga che hai scritto, invece che a un punto qualsiasi di un'unica gigantesca riga compressa. La tua anteprima di sviluppo è un posto che guardi solo tu. L'unica domanda che conta è se il tuo sito pubblicato le serve al mondo.",{"q":281,"a":282},"Il mio scan dice che il mio codice sorgente originale non è pubblicato. Sono al sicuro?","Significa che nessuna source map funzionante ha risposto quando abbiamo guardato, niente di più. Il tuo codice compresso resta pubblico, come quello di ogni app, e un deploy successivo può cambiare la risposta in silenzio, ed è per questo che vale la pena ripetere il controllo dopo i cambiamenti grandi.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",[285,286,287,288,289,290,291],"source map esposte produzione","source map esposta","rimuovere source map dalla produzione","è un problema pubblicare le source map","source map pubbliche","sourceMappingURL","vite sourcemap false",{},true,"Source map esposte: la tua app pubblica il suo codice?","\u002Fblog\u002Fsource-maps-exposed-in-production","2026-08-18",{"title":5,"description":264},"blog\u002Fsource-maps-exposed-in-production",[300,301,302,303],"Una source map esposta permette a chiunque di leggere il codice sorgente originale della tua app (componenti, logica e ogni commento) direttamente dal browser.","Da sola non è una violazione. Il codice non è un segreto. Ma una source map è una mappa verso il punto in cui starebbero i tuoi segreti, se qualcuno è mai finito nel tuo codice.","Una su otto delle 30.998 app vibe-coded che abbiamo scansionato ad agosto 2026 pubblicava le sue source map.","Il controllo richiede 30 secondi nel browser, e la correzione è una singola impostazione di build.","IOloc8r8fiXoxPk4WeC4XifyP3L9ekqhmCRFhMC9Cc0",1787826051019]