FireShield
← Tutti gli articoli

Guida

Come limitare una chiave API Firebase, passo per passo

3 novembre 2026 · 6 min di lettura

La tua chiave API Firebase viaggia dentro la tua app, quindi chiunque può copiarla. Cosa può chiamare dipende da te: trova ogni chiave, limita le sue API e app, e tieni fuori le API a pagamento come Gemini.

Perché le restrizioni contano

Una chiave API Firebase sta nella configurazione della tua app, quindi chiunque apra il tuo sito o scompatti la tua app può copiarla. È previsto: Firebase scrive "API keys for Firebase services are OK to include in code or checked-in config files." (le chiavi API dei servizi Firebase possono stare nel codice o in file di configurazione versionati) (Chiavi API Firebase). Il problema è una chiave che può chiamare più di quanto serve alla tua app. La documentazione di Google è netta: "Unrestricted API keys are insecure." (le chiavi API senza restrizioni non sono sicure) (restrizioni delle chiavi API).

Tre delle nostre storie horror sono iniziate allo stesso modo, con una chiave pubblica che poteva chiamare anche Gemini: 82.314 $ in 48 ore, 54.000 € in 13 ore e 67.000 $ in 19 ore.

Firebase limita le chiavi che crea, ma una chiave vecchia può permettere più di quanto pensi. Quando Firebase ha limitato le chiavi esistenti a maggio 2024, ognuna è stata "restricted to the list of the Firebase-related APIs plus any of the project's currently enabled APIs." (limitata all'elenco delle API legate a Firebase più tutte le API allora attive nel progetto). Un'API a pagamento attiva in quel momento è rimasta sulla chiave.

1. Trova tutte le chiavi del progetto

Apri API e servizi > Credenziali nella console Google Cloud e scegli il tuo progetto: lì ci sono tutte le chiavi API. Firebase ne crea una per piattaforma, una Browser key con il progetto e una chiave iOS o Android quando aggiungi quelle app. Cerca anche le chiavi create a mano da te o da un collega, e quelle arrivate con altri servizi Google, come Maps.

Per vedere quale chiave usa ogni app, vai nella console Firebase, Impostazioni progetto > Generali > Le tue app. Le app web la mostrano come apiKey nell'oggetto di configurazione, le app Android come current_key in google-services.json e le app Apple come API_KEY in GoogleService-Info.plist.

2. Limita le API che ogni chiave può chiamare

È la restrizione che contiene il danno. Senza di essa, "an API key can be used to access any API that is enabled for the project." (una chiave API può essere usata per accedere a qualsiasi API attiva nel progetto) (Chiavi API Firebase).

Nella pagina Credenziali:

  1. Fai clic sul nome della chiave.
  2. In Restrizioni delle API, scegli Limita chiave.
  3. Seleziona solo le API che la tua app chiama dal client. In una tipica app Firebase sono le API Firebase che usa, come Identity Toolkit per Auth, Cloud Firestore e Firebase Installations.
  4. Fai clic su Salva.

Attenzione con le chiavi di produzione. Se togli un'API che serve alla tua app, le sue chiamate falliscono con un errore API_KEY_SERVICE_BLOCKED. Firebase tiene un elenco delle API che servono a ogni servizio Firebase: controllalo prima di toglierne una, e prova prima la modifica su una chiave di test.

Da riga di comando, elenca le chiavi per avere i loro ID, poi imposta le API. L'elenco che passi è l'elenco completo: "the service names provided replace any existing services on the key." (i nomi di servizio indicati sostituiscono quelli già presenti sulla chiave)

gcloud services api-keys list --project=PROJECT_ID

gcloud services api-keys update KEY_ID \
  --api-target=service=identitytoolkit.googleapis.com \
  --api-target=service=securetoken.googleapis.com \
  --api-target=service=firestore.googleapis.com \
  --api-target=service=firebaseinstallations.googleapis.com

3. Limita dove si può usare ogni chiave

Le restrizioni delle applicazioni dicono quali siti o app possono usare la chiave. Senza, come dice Google, "API keys without application restrictions can be used from anywhere." (le chiavi API senza restrizioni delle applicazioni si possono usare da qualsiasi posto). Ogni chiave accetta un solo tipo: "You can apply only one application restriction type at a time." (puoi applicare un solo tipo di restrizione delle applicazioni alla volta). Scegli quello adatto alla chiave (restrizioni delle chiavi API):

  • Siti web. Per la Browser key, aggiungi i tuoi domini come referrer HTTP. Per consentire un intero sito, la documentazione di Google usa due voci, example.com/* e *.example.com/*. Usa una chiave separata per localhost invece di aggiungerlo alla chiave di produzione.
  • App Android. Aggiungi il nome del pacchetto e l'impronta SHA-1 di ogni certificato di firma.
  • App iOS. Aggiungi il bundle ID.

Considerale un filtro, non un lucchetto. Sulle restrizioni Android e iOS Google avverte: "Bypassing this restriction is straightforward." (aggirare questa restrizione è semplice). Anche il referrer è solo un'intestazione, e uno script fuori dal browser può inviare il valore che vuole. Le restrizioni delle applicazioni fermano il riuso occasionale della tua chiave. Sono le restrizioni delle API del passo 2 a limitare la fattura.

4. Gemini e le altre API a pagamento, ognuna con la sua chiave

Il consiglio di Firebase è diretto: "never include the Gemini Developer API in the allowlist for a publicly accessible API key or a key used for other services." (non includere mai la Gemini Developer API nell'elenco di una chiave API pubblica o di una chiave usata per altri servizi) (Chiavi API Firebase). Lo stesso vale per qualsiasi API Google Cloud a pagamento, come Maps, Vision o Translation. Dalle una chiave separata che possa chiamare solo quell'API, così puoi limitarla, ruotarla o eliminarla senza toccare Firebase.

Se il tuo server chiama la Gemini Developer API, quella chiave è un vero segreto. Firebase dice che "should never be included in your code or configuration files." (non deve mai essere inclusa nel tuo codice né nei file di configurazione). Tienila nei segreti del tuo backend, mai nell'app.

Se la tua app chiama Gemini con Firebase AI Logic, le richieste passano da Firebase e nel client non c'è nessuna chiave Gemini. Chiunque abbia la configurazione della tua app può comunque provare a inviarle, quindi proteggile con App Check e una quota giornaliera sull'API (come impostare dei limiti).

5. Ruota una chiave trapelata

Una chiave che non doveva mai essere pubblica, come una chiave server finita in un repository, ha bisogno di più delle restrizioni. Ruotala: nella pagina della chiave, fai clic su Ruota chiave. Google crea una chiave nuova con le stesse restrizioni, sposti le tue app e i tuoi server sulla nuova e poi elimini la precedente (ruotare una chiave API).

Una chiave Firebase dentro un'app pubblicata è diversa. Ogni copia installata la contiene, quindi ruotarla rompe le versioni vecchie. Per quella chiave, la soluzione sono le restrizioni qui sopra.

Cosa permette ancora una chiave limitata

Una chiave limitata può ancora chiamare tutte le API del suo elenco, tutte le volte che qualcuno vuole. Ci sono altri tre livelli per questo: le Security Rules decidono chi legge e scrive quali dati, App Check rifiuta le richieste che non arrivano dalla tua vera app e le quote limitano quante chiamate accetta un'API al giorno. Come limitare la spesa su Firebase li spiega uno per uno.

E se qualcosa passa comunque, FireShield controlla l'uso di ogni API ogni pochi minuti. Un servizio senza traffico che all'improvviso riceve migliaia di richieste, come Gemini nelle tre storie qui sopra, viene rilevato in pochi minuti e può far partire un'azione, fino a scollegare la fatturazione.

Logo di FireWand

Gestisci un database Firebase Data Connect?

FireWand ti permette di sfogliare, filtrare e modificare le tue tabelle con una vera console SQL, gratis per il tuo primo progetto.

Prova FireWand →