Vai al contenuto

Basi della sicurezza

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.

Vlad Tkachenko9 min di lettura

In breve

  • 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.

Hai scansionato la tua app, e una riga del rapporto dice che il tuo codice sorgente originale è pubblicato. Oppure qualcuno di tecnico ha premuto F12 sul tuo sito e ti ha detto che le tue source map sono esposte. In entrambi i casi suona male in un modo preciso e personale: la cosa a cui hai lavorato per mesi sta, a quanto pare, in bella vista, commenti compresi.

La lettura allarmata e l'alzata di spalle sbagliano entrambe. Una source map non è un segreto. È una mappa (il nome è letterale) verso il punto in cui starebbero i tuoi segreti, se qualcuno è mai finito nel tuo codice. Se la tua conta dipende da cosa c'è dentro, e controllarlo richiede circa 30 secondi.

È grave che le tue source map siano esposte?

È qualcosa da sistemare questa settimana. È raramente un motivo per andare nel panico stanotte.

Ciò che una source map esposta rivela è codice, e la tua app consegna già il suo codice a ogni visitatore, compresso in un blocco illeggibile, ma presente, perché il web funziona così. Un estraneo paziente, con gli strumenti giusti, potrebbe ricostruirne una versione approssimativa dal solo file compresso. La mappa elimina il requisito della pazienza: con lei, chiunque prema F12 legge il tuo progetto ordinato come appare nel tuo editor.

Il nostro scanner classifica una source map pubblicata come media, il centro della scala di gravità, e quella collocazione è voluta. Da solo, il codice leggibile è una perdita di riservatezza: qualcuno può studiare come funziona la tua app, leggere le tue funzioni a metà, prendere in prestito le tue idee. Sgradevole, e per un'app il cui valore è un prompt ingegnoso o un flusso insolito, un vero problema di business. Non una cassa aperta.

Il peso cambia il giorno in cui il tuo codice contiene qualcosa che non avrebbe mai dovuto essere codice. Una chiave che gira come parte della tua app finisce anche nel file compresso. La mappa la rende più facile da trovare, ma era già pubblicata, e quello è un riscontro a parte, più grave. I commenti sono diversi. La compressione li cancella da ciò che viene consegnato, quindi la mappa è l'unico posto pubblico in cui un commento esiste. Una password in una riga commentata, una nota remove before launch sopra la cosa che non è mai stata rimossa, un indirizzo interno annotato accanto alla funzione che lo chiama: niente di tutto questo è raggiungibile da un estraneo se non nella mappa.

Cos'è davvero una source map

È la traduzione tra il codice che il tuo sito consegna e il codice che hai scritto tu.

Quando la tua app viene pubblicata, il passaggio di build comprime il tuo codice: tutti i file schiacciati insieme, ogni nome accorciato a una o due lettere, ogni commento rimosso, il tutto su un'unica riga enorme. I browser lo eseguono senza lamentarsi. Nessuno può leggerlo, nemmeno gli strumenti che lo hanno costruito, e questo diventa un problema nel momento in cui qualcosa si rompe e l'errore punta alla riga 1, carattere 48.120, di un file che nessun essere umano ha mai visto.

Così gli strumenti di build scrivono un secondo file, la source map. Sta accanto a quello compresso (app.js riceve app.js.map) e contiene tutto ciò che la compressione ha buttato: i tuoi file originali, i loro nomi, la loro struttura di cartelle e ogni commento. L'ultima riga del file compresso porta l'indirizzo della mappa, e un browser la scarica quando si aprono i suoi strumenti per sviluppatori. Tutto qui il disegno. Esiste perché un errore possa puntare al codice che hai scritto davvero.

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.

Da quel disegno seguono due cose. I tuoi visitatori non scaricano mai la mappa (un browser la chiede solo quando si aprono gli strumenti per sviluppatori), quindi una mappa pubblicata non costa nulla, non cambia nulla sullo schermo e non si annuncia mai. E qualunque cosa possa aprire il tuo sito può scaricare la mappa, perché l'indirizzo è scritto nella pagina e davanti non c'è nessun login. Che il file sia lì è un'impostazione di build, e da fuori, accesa appare identica a spenta finché qualcuno non va a guardare.

Come controllare la tua app in 30 secondi

Sulla tua app online, l'indirizzo pubblicato che visitano i tuoi utenti, non l'anteprima dentro il tuo builder:

  1. Apri l'app in Chrome, Edge o Firefox e premi F12. Si aprono gli strumenti per sviluppatori del browser, lo stesso pannello che userebbe un estraneo.
  2. Clicca sulla scheda Sources, in alto nel pannello.
  3. Leggi l'albero dei file a sinistra. Il codice compresso appare come uno o due file con nomi tipo index-4f81ab2c.js. Le source map appaiono come il tuo progetto: una cartella chiamata src, file con i nomi delle tue pagine e dei tuoi componenti, e dentro codice che puoi leggere davvero.

Se lì puoi aprire un file e vedere i tuoi stessi commenti, le tue source map sono pubblicate. Il browser disegna quell'albero solo perché ha scaricato la mappa dal tuo sito online, esattamente come farebbe il browser di chiunque altro.

Se preferisci non frugare tra i pannelli, il nostro scan gratuito legge il tuo sito online da fuori e riporta questo controllo insieme ad altri otto: scansiona la tua app. Richiede una ventina di secondi e non serve un account.

Cosa può vedere un estraneo, e cosa no

Tutto ciò che hai scritto dentro l'app stessa, e nulla oltre.

Le source map pubblicate rivelano il tuo frontend: le tue pagine, i tuoi componenti, la logica che gira nel browser, i nomi delle route che la tua app chiama, ogni prompt che hai scritto dentro l'app e ogni commento.

Non arrivano al tuo server. Il codice che gira in una edge function o in un backend resta dov'è. Non aprono nemmeno il tuo database. Se un estraneo può leggere le tue tabelle lo decidono le regole su ciascuna tabella, non la visibilità del tuo codice, e quella domanda l'abbiamo misurata a parte sulle stesse app.

In pratica, il danno di una mappa pubblicata arriva come lettura silenziosa, non come un'irruzione clamorosa: qualcuno studia la tua logica di pagamento in cerca di un modo per aggirarla, o trova una route di amministrazione che nessuno ha mai collegato e la prova. Ognuna di queste cose diventa un problema solo se ciò che è stato trovato non era protetto. La mappa è una guida per l'estraneo; non è lei la porta aperta.

Quanto spesso spuntano source map pubblicate

Ad agosto 2026 abbiamo scansionato 30.998 app online pubblicate da Lovable, Base44, Replit, v0 e Bolt. Una su otto (il 13%) serviva almeno una source map funzionante.

Contiamo una mappa solo quando risponde davvero. L'indirizzo in fondo a un file compresso non prova nulla da solo, perché molte build scrivono l'indirizzo e non caricano mai il file; il nostro scanner lo segue e verifica che torni una mappa vera. E dove il controllo non è potuto arrivare in fondo, abbiamo registrato che non è potuto arrivare in fondo. Un'app che non siamo riusciti a controllare è sconosciuta, non pulita.

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.

Altri due numeri dello stesso giro rimettono questo al suo posto. La fuga di cui i proprietari vengono avvisati più spesso (una chiave segreta nella pagina, del tipo che ignora ogni regola del database) è comparsa 3 volte in quelle 30.998 app. E una tabella di database leggibile da qualunque estraneo è comparsa in più della metà delle app in cui quel controllo è arrivato in fondo. Le source map esposte stanno in mezzo: molto più comuni della fuga famosa, molto meno direttamente dannose della tabella aperta. Che è esattamente ciò che una gravità media sta cercando di dirti.

Come spegnere le source map in produzione

Un'impostazione di build, poi un nuovo deploy.

Se la tua app l'ha fatta un builder, diglielo in parole semplici, in inglese, dove i builder sono più affidabili:

Disable source map generation for production builds and redeploy.

Se gestisci tu il codice, l'impostazione vive nella configurazione di build. In un progetto Vite (che è ciò che sta sotto la maggior parte delle app Lovable e Bolt) è build.sourcemap: false in vite.config; un'app Nuxt ha la sua opzione sourcemap. Ridistribuisci, poi ripeti il controllo da 30 secondi: l'albero di file leggibile sotto Sources dovrebbe essere sparito, e dovrebbero restare solo i nomi compressi.

Due code prima di archiviare la faccenda. Spegnere le mappe non richiama le copie. Chiunque abbia scaricato la tua mappa mentre era su ha il tuo codice com'era quel giorno. Quindi leggi il tuo stesso codice prima di rilassarti: se da qualche parte c'è scritta una chiave, una password o qualsiasi altra cosa che non dovrebbe essere pubblica, ruotala adesso; togliere la mappa chiude la porta ai nuovi lettori, non a ciò che è già stato copiato. E l'impostazione può tornare: un aggiornamento di template, una configurazione rigenerata o una nuova destinazione di deploy può riaccendere le mappe senza che tu abbia toccato nulla.

Cosa fare adesso

Cosa fare

  • Premi F12 sulla tua app online, apri Sources e cerca una cartella chiamata src. File leggibili con i tuoi stessi commenti significano che le tue source map sono pubblicate.
  • Spegnile con un'istruzione al tuo builder (disable source maps for production builds and redeploy) oppure imposta tu sourcemap: false nella configurazione di build.
  • 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.
  • Lascia in pace le source map di sviluppo. Stanno facendo il loro lavoro, e in discussione c'è solo il sito pubblicato.
  • Ripeti il controllo da 30 secondi dopo gli aggiornamenti di template e i deploy grandi. Questa impostazione ha il vizio di riaccendersi da sola.

È quest'ultima abitudine quella che scivola, perché niente sembra diverso quando la risposta cambia. Reeve Care riesegue questo stesso scan contro la tua app online secondo un calendario, questo controllo incluso, e ti scrive quando un risultato peggiora: cosa sorveglia e quanto costa.

Se preferisci chiudere tutto in una volta sola, la checklist di sicurezza da 10 minuti copre questo insieme alle altre porte che meritano uno sguardo in un'app appena lanciata.

FAQ

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.

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.

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.

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.

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.

Scritto da

Vlad Tkachenko

Fondatore di Reeve

Passo le giornate a guardare app costruite con Lovable, Bolt, v0, Cursor e Replit, e la breve lista di errori che vi ricompaiono di continuo.

Altro sull'autore

Da leggere dopo

Non sai come sta messa la tua app?

Esegui una scansione gratuita e ottieni un voto chiaro da A a F in una ventina di secondi. Senza account e senza carta.

Scansiona la tua app gratis

Controllo esterno automatizzato, non un audit completo. L'assenza di risultati non è una garanzia di sicurezza.