Basi della sicurezza
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.
In breve
- Una chiave API Google esposta nel tuo frontend di solito non è un problema, perché una chiave Google è un identificativo di fatturazione e non una password.
- A renderla sicura è una restrizione per referrer HTTP: una impostazione che dice a Google che la chiave funziona solo dal tuo sito.
- È gratis, richiede circa cinque minuti ed è la sola cosa che vale la pena fare oggi.
- Un file di account di servizio Google nella tua app è il caso diverso e urgente. Quelle sono credenziali vere.
Apri la tua app nel browser, guarda il codice sorgente della pagina e cerca
AIza. Se compare una stringa di quaranta caratteri, probabilmente qualcuno ti
ha già detto che è «esposta», e probabilmente non ti ha detto cosa fare dopo.
Ecco il punto che quasi tutti i consigli su questo tema sbagliano: una chiave API Google nel tuo frontend non è lo stesso tipo di problema di una chiave segreta Stripe nel tuo frontend, e la soluzione non è nasconderla. Trattarle allo stesso modo porta o a spaventarsi per la propria mappa o, peggio, a imparare a scrollare le spalle davanti alla parola «esposta» poco prima del giorno in cui conta davvero.
Tra il 12 e il 14 agosto 2026 abbiamo eseguito gli stessi nove controlli esterni su 30.998 app online costruite con Lovable, Bolt, v0, Replit e Base44. In 1.142 di esse è comparsa una chiave API Google. In tre è comparsa una chiave segreta Stripe. I numeri completi sono nel nostro rapporto di scansione.
È grave che la mia chiave API Google sia esposta nel frontend?
Di solito no. Dipende interamente dal fatto che la chiave sia limitata.
Una chiave API Google non è una password. Assomiglia piuttosto a un numero di conto: dice a Google quale progetto fatturare e da quale quota attingere. Da sola non dice nulla su chi sta facendo la richiesta.
Ecco perché può stare nella tua pagina. La mappa viene disegnata dal browser del tuo visitatore, quindi è il browser a dover inviare quel numero di conto a Google. Non esiste una versione di tutto questo in cui la mappa si carica e il numero resta nascosto.
La protezione arriva da una seconda impostazione, custodita dalla parte di Google, che dice da quali siti il numero può essere usato. Google la chiama restrizione per referrer HTTP. Una volta impostata, la chiave stampata nella tua pagina funziona sul tuo sito e restituisce un errore ovunque altro.
Perché la tua app spedisce la chiave
Perché la richiesta parte dal browser del tuo visitatore e non dal tuo server.
Quando qualcuno carica una pagina con una mappa, quel browser parla direttamente
con maps.googleapis.com. Deve dire a quale progetto Google appartiene la
richiesta, e quell'identificativo deve stare nella pagina, perché la pagina è il
punto da cui parte la richiesta.
Google lo sa. È per questo che la restrizione esiste come controllo separato: l'identificativo sarebbe comunque diventato pubblico, quindi ciò che decide chi può usarlo vive in un posto che il pubblico non raggiunge.
Come limitare una chiave API Google
È gratis, richiede circa cinque minuti e non devi toccare il codice della tua app. Nella console di Google Cloud:
- Vai su API e servizi → Credenziali e clicca sulla chiave che hai trovato.
- In Restrizioni applicazione, scegli Siti web.
- Aggiungi il tuo dominio. Per un sito su
yourapp.com, aggiungihttps://yourapp.com/*. Aggiungi anche il tuo dominio di anteprima o di staging, se ne hai uno, e ricordati dell'indirizzo.lovable.appo.vercel.appsu cui la tua app era pubblicata prima che le collegassi un dominio personalizzato. - In Restrizioni API, scegli Limita chiave e spunta solo le API che la tua app chiama davvero. Una mappa con ricerca di luoghi ha bisogno della Maps JavaScript API e della Places API, e di nient'altro.
- Salva, aspetta qualche minuto, poi carica il tuo sito e controlla che la mappa venga ancora disegnata.
Se il passo 3 è sbagliato, te ne accorgi subito e in modo visibile: la mappa
fallisce con RefererNotAllowedMapError nella console del browser, che nomina
esattamente il problema. Aggiungi il dominio mancante e torna a funzionare. È una
modifica reversibile, ed è per questo che vale la pena farla prima di aver finito
di leggere questo articolo.
Una cosa da non fare: le indicazioni di risoluzione dei problemi di Google dicono che le restrizioni per indirizzo IP sono pensate per chiavi lato server e non sono adatte a una chiave usata da un browser. Se limiti per IP una chiave del frontend, la tua app si rompe per ogni visitatore.
Se preferisci vedere quali chiavi la tua app sta effettivamente spedendo prima di passarle una per una, la nostra scansione gratuita legge il tuo sito dal vivo dall'esterno e ti dice cosa trova. Dura circa 20 secondi e non richiede un account: scansiona la tua app.
Quali credenziali Google stanno in un browser
| Credenziale | Che aspetto ha | Nel tuo frontend? | Cosa la protegge davvero |
|---|---|---|---|
| Chiave browser di Maps o Places | AIza… | Sta qui | La restrizione per referrer, più un tetto di quota |
| Chiave di configurazione web di Firebase | AIza… | Sta qui | Le regole di sicurezza di Firebase e App Check |
| Una chiave che usi dal tuo server | AIza… | Mai | Niente, una volta pubblica. Tienila lato server |
| Account di servizio | un file JSON che contiene "private_key" | Mai | Niente. Questa è una credenziale vera |
Le prime tre righe sono la stessa stringa. Una chiave API Google non porta scritto davanti a cosa serve, quindi la domanda non è mai «che aspetto ha questa chiave» ma «cosa può fare questa chiave», e quella risposta vive nella console e non nel tuo codice.
La chiave di Firebase è fatta per essere pubblica
Questa è la riga su cui ci fanno più domande, e la documentazione di Firebase risponde con chiarezza: le chiavi API dei servizi Firebase possono stare nel codice o nei file di configurazione, perché non controllano l'accesso a nulla. A deciderlo sono le regole di sicurezza di Firebase e App Check.
Se ti suona familiare, è lo stesso assetto che usa Supabase. La chiave pubblicabile identifica il progetto, e le regole dietro di essa decidono riga per riga chi può leggere cosa. In entrambi i casi la chiave è sicura solo grazie a quelle regole, quindi sono le regole la cosa da andare a guardare: attivarle non equivale a essere protetti.
Cosa succede davvero quando trapela una chiave senza restrizioni
Una bolletta, un disservizio o entrambi. Non una violazione di dati.
Scraper automatici percorrono le pagine pubbliche raccogliendo stringhe AIza, e
una chiave senza restrizioni funziona da qualsiasi posto, quindi la tua finisce
per servire tasselli di mappa e ricerche di luoghi per il progetto di qualcun
altro. Google lo dice direttamente nella sua documentazione introduttiva: il
motivo per impostare restrizioni è impedire il furto di quota.
Di solito te ne accorgi in uno di due modi. La fattura è più alta del mese scorso senza un motivo che sai indicare, oppure le mappe della tua app smettono di disegnarsi a metà mese perché il progetto ha esaurito la quota e ogni visitatore ora vede un rettangolo grigio.
Entrambe si risolvono. Nessuna delle due espone i dati dei tuoi utenti, perché una chiave di Maps non può leggere il tuo database. È questa la differenza onesta tra questo riscontro e una chiave di database trapelata, ed è il motivo per cui il nostro scanner segnala una chiave API Google come qualcosa da controllare e non come un'emergenza.
L'unica credenziale Google che si comporta davvero come un'emergenza è un account
di servizio. Se la tua app sta spedendo un file JSON con
"type": "service_account" e dentro un blocco "private_key", quelle sono
credenziali vere con permessi veri sul tuo progetto cloud. Elimina la chiave
nella console, poi guarda a cosa poteva arrivare.
Cosa fare adesso
Cosa fare
- Cerca
AIzanel codice sorgente del tuo sito dal vivo. Ogni occorrenza è una chiave di cui rispondere. - Limita ognuna nella console di Google Cloud: Siti web nelle restrizioni applicazione, il tuo dominio, e solo le API che usi. Gratis, circa cinque minuti, nessuna modifica al codice.
- Già che ci sei metti anche un tetto di quota giornaliera sulla chiave. La restrizione riduce il traffico; un tetto limita quanto tutto questo può costare.
- Lascia la tua chiave di configurazione Firebase dov'è. Controlla invece che le tue regole di sicurezza stiano facendo il loro lavoro, e tieni la Gemini API fuori dall'elenco consentito di quella chiave.
- Se trovi un file JSON
service_accountnel tuo frontend, trattalo come urgente. Elimina la chiave nella console invece di togliere solo il file, perché la tua cronologia delle versioni contiene ancora il vecchio valore.
Se preferisci affrontarlo come una lista, la checklist di sicurezza in 10 minuti copre questo insieme alle altre cose da disattivare in una app appena lanciata. E per la domanda più ampia su quali chiavi stiano in un browser, abbiamo una guida per distinguere le chiavi pubblicabili da quelle segrete.
FAQ
Qualcuno ha trovato la mia chiave di Google Maps nel codice della pagina. Devo rigenerarla?
Prima limitala: richiede circa cinque minuti e non rompe nulla. Apri la chiave nella console di Google Cloud, imposta le restrizioni applicazione su Siti web e aggiungi il tuo dominio, poi limita le restrizioni API alle sole API che la tua app usa. Rigenerarla viene dopo, e solo se la chiave è rimasta senza restrizioni per un po' e vedi un consumo che non hai causato tu.
Non posso semplicemente nascondere la chiave?
No. Il browser del tuo visitatore deve inviare la chiave a Google per caricare la mappa, quindi tutto ciò che il browser può usare, un visitatore può leggerlo. Minificare o rinominare rallenta qualcuno solo per pochi secondi. Limitare la chiave è la soluzione che funziona davvero, e funziona indipendentemente dal fatto che qualcuno trovi la chiave.
La mia chiave è limitata al mio dominio. Qualcuno può usarla lo stesso?
Un header referrer si può falsificare, quindi una persona determinata può inviare richieste che dichiarano di venire dal tuo sito. Quello che la restrizione elimina è il caso facile: uno scraper automatico che raccoglie chiavi su pagine pubbliche e le usa direttamente dal proprio server. È quel traffico a produrre bollette a sorpresa, quindi la restrizione vale la pena anche se non è un muro. Metti anche un tetto di quota giornaliera sulla chiave e avrai un limite a quanto tutto questo può costarti.
Firebase ha messo una chiave API nel mio file di configurazione. È un errore?
No, e Firebase lo documenta. Una chiave API web di Firebase identifica il tuo progetto invece di autorizzare l'accesso, e dell'accesso decidono le regole di sicurezza di Firebase e App Check. È fatta per stare nel tuo codice. L'unica cosa da evitare è aggiungere la Gemini Developer API all'elenco delle API consentite di quella chiave, perché così una chiave pubblicata di proposito diventa una chiave che può spendere denaro.
E se trovo un file con "type": "service_account" nella mia app?
Quella è una situazione diversa ed è urgente. Una chiave di account di servizio è una credenziale vera con dentro una chiave privata, e il suo posto è un server. Elimina la chiave nella console di Google Cloud sotto IAM e amministrazione, poi Account di servizio, togli il file dal tuo frontend e controlla la fatturazione e i log di audit. Eliminarla solo dal codice non chiude la porta, perché il vecchio valore resta nella cronologia delle versioni.