Sviluppatori

Claude Code, Cursor: proteggere i segreti (.env, chiavi API) con gli assistenti di programmazione

Un assistente di programmazione legge i file e lancia comandi: è il suo punto di forza, ed è anche la via per cui una chiave API o una password del database può finire nel suo contesto. I rischi concreti, le impostazioni previste da Claude Code e Cursor e ciò che non coprono.

Pubblicato il Aggiornato il 7 min di letturaA cura della redazione di Tacite-IA

Indice
  1. Come un segreto finisce nel contesto di un assistente
  2. Claude Code: permessi e hook
  3. Cursor: il file .cursorignore
  4. Cosa non coprono le impostazioni native
  5. Il livello Tacite-IA: bloccare la lettura e proporre una copia
  6. Le buone pratiche lato progetto
  7. Domande frequenti
  8. Fonti

Gli assistenti di programmazione come Claude Code o Cursor non si limitano a suggerire righe di codice: esplorano il progetto, aprono file, lanciano comandi e ne leggono i risultati. È ciò che li rende utili. Ed è anche il motivo per cui un file .env, una chiave API o una password del database può finire nel loro contesto e poi essere trasmesso al servizio del fornitore del modello. Questa guida descrive i rischi concreti, le impostazioni che i fornitori propongono nella loro documentazione ufficiale e ciò che un livello di controllo locale può aggiungere.

Come un segreto finisce nel contesto di un assistente

Non serve un errore clamoroso. Il più delle volte il segreto arriva con un gesto ordinario:

  • La lettura di un file di configurazione. Per capire perché una connessione non riesce, l’assistente apre il .env, appsettings.json o un file di configurazione che contiene la stringa di connessione completa.
  • Un comando del terminale. Un «cat», un «grep» su tutto il progetto, la visualizzazione delle variabili d’ambiente o dei log di un’applicazione possono far comparire valori sensibili nell’output che l’assistente legge.
  • L’incolla nella conversazione. È lo sviluppatore stesso a incollare un messaggio d’errore o un estratto di configurazione che contiene la chiave.
  • Gli strumenti collegati. Un server MCP o un comando di invio può far uscire dati verso un servizio terzo.

Una volta nel contesto, il segreto fa parte di ciò che viene inviato al modello. Può anche essere ricopiato dall’assistente in un file, in un commit o in una risposta. I segreti esposti restano del resto un problema di vasta portata: nel suo rapporto pubblicato il 17 marzo 2026, GitGuardian ha censito 28,65 milioni di nuovi segreti inseriti direttamente nel codice (hardcoded) in commit pubblici su GitHub nel 2025, il 34% in più rispetto all’anno precedente. Lo stesso rapporto conta 24.008 segreti esposti in file di configurazione di server MCP.6 L’OWASP raccomanda dal canto suo di gestire i segreti in modo centralizzato (archiviazione, accesso, rotazione) anziché lasciarli in chiaro nel codice o nella configurazione.5

.envVersione anonimizzata

DB_PASSWORD=Xk92!pLmQ7[SEGRETO_1]

PAYMENT_API_KEY=a8F3kq0W…Zt[SEGRETO_2]

SMTP_PASSWORD=mT4#vR8w[SEGRETO_3]

3 dati sostituiti sul computer
Un file .env prima e dopo l’anonimizzazione: la struttura resta leggibile per l’assistente, i valori non partono. Valori fittizi.

Claude Code: permessi e hook

La documentazione di Claude Code descrive un sistema di permessi configurabile in file di impostazioni. Per impedire allo strumento di leggere un file o una cartella, indica di aggiungere una regola di rifiuto in lettura sul relativo percorso, ad esempio Read(./.env) o Read(./secrets/**).1 La pagina di riferimento delle impostazioni fornisce un esempio pronto da copiare per escludere i file che contengono chiavi API, segreti o variabili d’ambiente.3 La documentazione precisa inoltre che un file .claudeignore non ha alcun effetto: le sue voci vanno riprese sotto forma di regole di rifiuto.1

Queste regole si applicano agli strumenti di lettura integrati, ma anche ai comandi del terminale che Claude Code riconosce, come cat, head o tail. La documentazione ne indica essa stessa il limite: non si applicano a un comando che legge file senza nominarli, come una ricerca ricorsiva lanciata dalla cartella, né a uno script che apre file per conto proprio. Per una protezione a livello di sistema, rimanda alla sandbox di Claude Code.1

Per le organizzazioni, Anthropic prevede impostazioni gestite («managed settings»), distribuite dagli amministratori e che le impostazioni degli utenti e dei progetti non possono aggirare, salvo alcune eccezioni.1 Claude Code propone infine gli hook: comandi eseguiti automaticamente in momenti precisi. Quello che viene eseguito prima della chiamata a uno strumento (PreToolUse) può bloccarla.2 È su questo meccanismo ufficiale che si basano i controlli complementari, tra cui quello di Tacite-IA.

Cursor: il file .cursorignore

Cursor consente di dichiarare, in un file .cursorignore posto nella radice del progetto, le cartelle e i file a cui l’editor non deve accedere per le sue funzioni di IA. Secondo la sua documentazione, i file .env* figurano già nell’elenco dei file ignorati per impostazione predefinita.4

La stessa pagina indica chiaramente due limiti: gli strumenti del terminale e dei server MCP usati dall’agente non possono bloccare l’accesso ai file coperti da .cursorignore e, anche se Cursor blocca i file ignorati, una protezione completa non è garantita a causa della natura imprevedibile dei modelli linguistici.4 Queste precisazioni meritano un posto nell’analisi dei rischi di qualsiasi team che usi lo strumento.

Cosa non coprono le impostazioni native

Le impostazioni native sono un primo livello indispensabile. Si basano però su elenchi di percorsi: un segreto conservato in un file dal nome innocuo (config.local.json, notes.txt), copiato in un log o mostrato da un comando sfugge a una regola scritta per «.env». Devono inoltre essere configurate progetto per progetto, o centralizzate dall’organizzazione, altrimenti ogni sviluppatore riparte da zero.

CriterioRegole di rifiutoFile di esclusioneControllo locale
Impedisce la lettura diretta di un .envSìSìSì
Copre i comandi del terminaleIn parteNoIn parte
Individua un segreto in un file dal nome innocuoNoNoSì
Propone una copia anonimizzataNoNoSì
Confronto indicativo elaborato dalla redazione a partire dalle documentazioni citate (fonti 1 e 4). «In parte»: le regole di rifiuto di Claude Code coprono i comandi che riconosce (cat, head e simili); un controllo locale copre i comandi che è in grado di analizzare. La sandbox di Claude Code, non rappresentata qui, agisce a livello di sistema.

L’ANSSI, l’agenzia nazionale francese per la cybersicurezza, raccomanda un approccio prudente nell’adozione dell’IA generativa.7 Applicato agli assistenti di programmazione, si traduce in segreti assenti dal computer quando possibile, regole di rifiuto dove restano e un controllo che guardi il contenuto stesso. Lato repository, l’analisi dei segreti offerta dalle piattaforme, come il secret scanning di GitHub che esamina l’intera cronologia Git, recupera a posteriori una parte degli errori.8

Il livello Tacite-IA: bloccare la lettura e proporre una copia

Tacite-IA si installa sul computer e si basa sugli hook ufficiali degli assistenti di programmazione. In Claude Code, ogni azione viene esaminata prima che avvenga:

  • Lettura di un file sensibile (.env, chiavi SSH, credenziali cloud, chiavi private, file di configurazione con segreti): la lettura viene sospesa e viene chiesta una conferma, oppure viene rifiutata se l’organizzazione lo ha deciso.
  • Contenuto analizzato, non solo il nome: un file letto dallo strumento di lettura o da un comando come cat o grep viene analizzato sul computer. Se contiene segreti o dati personali, Tacite-IA scrive una copia anonimizzata e ne indica la posizione: l’assistente può lavorare sulla struttura senza vedere i valori.
  • Comandi di invio: un invio di file verso l’esterno (curl, scp e simili) o un tentativo di disattivare la protezione fa scattare una conferma.
  • Messaggi digitati: una chiave incollata nella conversazione viene individuata prima dell’invio, con la proposta della versione anonimizzata.

I controlli si estendono agli altri assistenti di programmazione supportati (Cursor, Windsurf, OpenAI Codex, Gemini CLI, Copilot CLI), nella misura in cui i loro hook lo consentono. Come ogni analisi dei comandi, quella di Tacite-IA non vede ciò che uno script apre per conto proprio: la sandbox e una buona gestione dei segreti restano necessarie. L’analisi avviene senza IA e nulla viene inviato ai nostri server: la console riceve solo tipi di dati e decisioni, mai il contenuto.

Le buone pratiche lato progetto

  1. Togliere i segreti dal repositoryFile .env ignorato da git, modello .env.example senza valori.
  2. Preferire un gestore di segretiUna cassaforte digitale o variabili iniettate all’avvio anziché un file in chiaro.
  3. Limitare la portata delle chiaviChiavi di sviluppo, permessi minimi, ambiente di test.
  4. Prevedere la rotazioneUna chiave esposta si revoca e si sostituisce, senza aspettare.
  5. Configurare l’assistenteRegole di rifiuto o file di esclusione per i percorsi sensibili.
  6. Aggiungere un controllo sul computerPer i casi che le impostazioni non coprono.
Sei misure, dalla gestione dei segreti alla configurazione dell’assistente (fonti 1, 4 e 5).

Queste regole meritano un posto nella policy dell’organizzazione, accanto a quelle che riguardano gli assistenti conversazionali: il nostro modello di policy IA cita i codici di accesso tra i dati da non inserire mai. Per gli altri tipi di dati, si veda la nostra guida per anonimizzare i dati prima di ChatGPT.

Domande frequenti

Claude Code può leggere il mio file .env?

Sì, se ne ha il permesso: lo strumento legge i file del progetto per svolgere i suoi compiti. La documentazione di Claude Code spiega come impedirlo con regole di rifiuto in lettura, ad esempio Read(./.env) e Read(./secrets/**), e precisa che un file .claudeignore non ha alcun effetto.

Il file .cursorignore basta a proteggere i miei segreti?

È una protezione utile, e i file .env* sono ignorati per impostazione predefinita. Ma la documentazione di Cursor precisa che gli strumenti di terminale e MCP dell’agente non possono bloccare l’accesso ai file ignorati e che una protezione completa non è garantita. Meglio non tenere segreti in chiaro nel progetto e aggiungere un controllo complementare.

Cosa fare se una chiave API è stata inviata a un assistente di programmazione?

Considerarla esposta: revocarla, crearne una nuova e controllare i log di utilizzo del servizio interessato. Se la chiave dava accesso a dati personali, valutare se si tratti di una violazione dei dati personali ai sensi del GDPR.

I segreti possono trapelare tramite un comando del terminale?

Sì. Mostrare un file, cercare in tutto il progetto o elencare le variabili d’ambiente produce un output che l’assistente legge. Le regole basate sui nomi dei file non coprono tutti questi casi, come riconoscono le documentazioni di Claude Code e di Cursor; la sandbox e un controllo che analizzi il comando e il suo contenuto riducono questo rischio.

Fonti

  1. Configure permissions. Documentazione di Claude Code, Anthropic. Consultata il 8 ottobre 2026.
  2. Hooks reference. Documentazione di Claude Code, Anthropic. Consultata il 8 ottobre 2026.
  3. Settings reference: exclude sensitive files. Documentazione di Claude Code, Anthropic. Consultata il 8 ottobre 2026.
  4. Ignore file. Documentazione di Cursor (Anysphere). Consultata il 8 ottobre 2026.
  5. Secrets Management Cheat Sheet. OWASP Cheat Sheet Series. Consultata il 8 ottobre 2026.
  6. The State of Secrets Sprawl 2026. GitGuardian, 17 marzo 2026. Consultata il 8 ottobre 2026.
  7. Recommandations de sécurité pour un système d’IA générative. ANSSI (agenzia nazionale francese per la cybersicurezza), 29 aprile 2024. In francese. Consultata il 5 ottobre 2026.
  8. About secret scanning. GitHub Docs. Consultata il 8 ottobre 2026.
Una misura tra le altre

Regolamentare l’uso, senza frenare i team

Tacite-IA individua i dati sensibili nei messaggi e nei file prima del loro invio agli assistenti IA in Chrome ed Edge, oltre che negli assistenti di programmazione (Claude Code, Cursor, Windsurf, Codex, Gemini CLI, Copilot CLI). L’analisi avviene al 100% sul computer, senza IA, con una console di amministrazione e una modalità audit. Le applicazioni desktop (ChatGPT per computer, scheda Chat di Claude Desktop, Copilot di Windows) non sono coperte.

6 € IVA esclusa per utente al mese con il piano annuale, 8 € IVA esclusa con il piano mensile. Prova di 3 mesi.

Da leggere anche