Développeurs

Claude Code, Cursor : protéger ses secrets (.env, clés API) avec les assistants de code

Un assistant de code lit vos fichiers et exécute des commandes : c’est sa force, et c’est aussi par là qu’une clé API ou un mot de passe de base de données peut se retrouver dans son contexte. Les risques concrets, les réglages prévus par Claude Code et Cursor, et ce qu’ils ne couvrent pas.

Publié le Mis à jour le 7 min de lecturePar la rédaction Tacite-IA

Sommaire
  1. Comment un secret se retrouve dans le contexte d’un assistant
  2. Claude Code : permissions et crochets
  3. Cursor : le fichier .cursorignore
  4. Ce que les réglages natifs ne couvrent pas
  5. La couche Tacite-IA : bloquer la lecture et proposer une copie
  6. Les bonnes pratiques côté projet
  7. Questions fréquentes
  8. Sources

Les assistants de code comme Claude Code ou Cursor ne se contentent pas de suggérer des lignes : ils parcourent le projet, ouvrent des fichiers, lancent des commandes et lisent leurs résultats. C’est ce qui les rend utiles. C’est aussi la raison pour laquelle un fichier .env, une clé API ou un mot de passe de base de données peut se retrouver dans leur contexte, puis être transmis au service du fournisseur du modèle. Ce guide décrit les risques concrets, les réglages que proposent les éditeurs dans leur documentation officielle, et ce qu’une couche de contrôle locale peut ajouter.

Comment un secret se retrouve dans le contexte d’un assistant

Il n’y a pas besoin d’erreur spectaculaire. Le plus souvent, le secret arrive par un geste ordinaire :

  • La lecture d’un fichier de configuration. Pour comprendre pourquoi une connexion échoue, l’assistant ouvre le .env, appsettings.json ou un fichier de configuration qui contient la chaîne de connexion complète.
  • Une commande du terminal. Un « cat », un « grep » sur tout le projet, l’affichage des variables d’environnement ou des journaux d’une application peuvent faire apparaître des valeurs sensibles dans la sortie que l’assistant lit.
  • Le collage dans la conversation. Le développeur colle lui-même un message d’erreur ou un extrait de configuration qui contient la clé.
  • Les outils connectés. Un serveur MCP ou une commande d’envoi peut faire sortir des données vers un service tiers.

Une fois dans le contexte, le secret fait partie de ce qui est envoyé au modèle. Il peut aussi être recopié par l’assistant dans un fichier, un commit ou une réponse. Les secrets exposés restent d’ailleurs un problème massif : dans son rapport publié le 17 mars 2026, GitGuardian a recensé 28,65 millions de nouveaux secrets inscrits en dur dans des commits publics sur GitHub en 2025, soit 34 % de plus qu’un an plus tôt. Le même rapport compte 24 008 secrets exposés dans des fichiers de configuration de serveurs MCP.6 L’OWASP recommande de son côté de gérer les secrets de façon centralisée (stockage, accès, rotation) plutôt que de les laisser en clair dans le code ou la configuration.5

.envVersion anonymisée

DB_PASSWORD=Xk92!pLmQ7[SECRET_1]

PAYMENT_API_KEY=a8F3kq0W…Zt[SECRET_2]

SMTP_PASSWORD=mT4#vR8w[SECRET_3]

3 données remplacées sur le poste
Un fichier .env avant et après anonymisation : la structure reste lisible pour l’assistant, les valeurs ne partent pas. Valeurs fictives.

Claude Code : permissions et crochets

La documentation de Claude Code décrit un système de permissions configurable dans des fichiers de réglages. Pour empêcher l’outil de lire un fichier ou un dossier, elle indique d’ajouter une règle de refus en lecture sur son chemin, par exemple Read(./.env) ou Read(./secrets/**).1 La page de référence des réglages fournit un exemple prêt à copier pour exclure les fichiers qui contiennent des clés API, des secrets ou des variables d’environnement.3 La documentation précise au passage qu’un fichier .claudeignore n’a aucun effet : ses entrées doivent être reprises sous forme de règles de refus.1

Ces règles s’appliquent aux outils de lecture intégrés, mais aussi aux commandes du terminal que Claude Code reconnaît, comme cat, head ou tail. La documentation en donne elle-même la limite : elles ne s’appliquent pas à une commande qui lit des fichiers sans les nommer, comme une recherche récursive lancée depuis le dossier, ni à un script qui ouvre lui-même des fichiers. Pour une protection au niveau du système, elle renvoie au bac à sable (sandbox) de Claude Code.1

Pour les organisations, Anthropic prévoit des réglages gérés (« managed settings »), déployés par les administrateurs et que les réglages des utilisateurs et des projets ne peuvent pas contourner, à quelques exceptions près.1 Claude Code propose enfin des crochets (hooks) : des commandes exécutées automatiquement à des moments précis. Celui qui s’exécute avant l’appel d’un outil (PreToolUse) peut le bloquer.2 C’est sur ce mécanisme officiel que s’appuient les contrôles complémentaires, dont celui de Tacite-IA.

Cursor : le fichier .cursorignore

Cursor permet de déclarer, dans un fichier .cursorignore placé à la racine du projet, les dossiers et fichiers auxquels l’éditeur ne doit pas accéder pour ses fonctions d’IA. Selon sa documentation, les fichiers .env* figurent déjà dans la liste des fichiers ignorés par défaut.4

La même page indique clairement deux limites : les outils de terminal et de serveurs MCP utilisés par l’agent ne peuvent pas bloquer l’accès aux fichiers couverts par .cursorignore, et, si Cursor bloque les fichiers ignorés, une protection complète n’est pas garantie en raison du caractère imprévisible des modèles de langage.4 Ces précisions ont leur place dans l’analyse de risque de toute équipe qui utilise l’outil.

Ce que les réglages natifs ne couvrent pas

Les réglages natifs sont une première couche indispensable. Ils reposent cependant sur des listes de chemins : un secret stocké dans un fichier au nom anodin (config.local.json, notes.txt), copié dans un journal ou affiché par une commande échappe à une règle écrite pour « .env ». Ils doivent aussi être configurés projet par projet, ou centralisés par l’organisation, sans quoi chaque développeur part de zéro.

CritèreRègles de refusFichier d’exclusionContrôle local
Empêche la lecture directe d’un .envOuiOuiOui
Couvre les commandes du terminalEn partieNonEn partie
Repère un secret dans un fichier au nom anodinNonNonOui
Propose une copie anonymiséeNonNonOui
Comparaison indicative établie par la rédaction à partir des documentations citées (sources 1 et 4). « En partie » : les règles de refus de Claude Code couvrent les commandes qu’il reconnaît (cat, head…) ; un contrôle local couvre les commandes qu’il sait analyser. Le bac à sable de Claude Code, non représenté ici, agit au niveau du système.

L’ANSSI recommande une posture de prudence lors du déploiement de l’IA générative.7 Appliquée aux assistants de code, elle se traduit par des secrets absents du poste quand c’est possible, des règles de refus là où ils subsistent, et un contrôle qui regarde le contenu lui-même. Côté dépôt, l’analyse des secrets proposée par les plateformes, comme le secret scanning de GitHub qui parcourt tout l’historique Git, rattrape une partie des erreurs après coup.8

La couche Tacite-IA : bloquer la lecture et proposer une copie

Tacite-IA s’installe sur le poste et s’appuie sur les crochets officiels des assistants de code. Dans Claude Code, chaque action est examinée avant d’avoir lieu :

  • Lecture d’un fichier sensible (.env, clés SSH, identifiants cloud, clés privées, fichiers de configuration avec secrets) : la lecture est suspendue et une confirmation est demandée, ou refusée si l’organisation l’a décidé.
  • Contenu analysé, pas seulement le nom : un fichier lu par l’outil de lecture ou par une commande comme cat ou grep est analysé sur le poste. S’il contient des secrets ou des données personnelles, Tacite-IA écrit une copie anonymisée et indique son emplacement : l’assistant peut travailler sur la structure sans voir les valeurs.
  • Commandes d’envoi : un envoi de fichier vers l’extérieur (curl, scp…) ou une tentative de désactiver la protection déclenche une confirmation.
  • Messages tapés : une clé collée dans la conversation est repérée avant l’envoi, avec la version anonymisée proposée.

Les contrôles s’étendent aux autres assistants de code pris en charge (Cursor, Windsurf, OpenAI Codex, Gemini CLI, Copilot CLI), dans la mesure de ce que leurs propres crochets permettent. Comme toute analyse de commande, celle de Tacite-IA ne voit pas ce qu’un script ouvre de lui-même : le bac à sable et la bonne gestion des secrets restent nécessaires. L’analyse est faite sans IA et rien n’est envoyé à nos serveurs : la console ne reçoit que des types de données et des décisions, jamais le contenu.

Les bonnes pratiques côté projet

  1. Sortir les secrets du dépôtFichier .env ignoré par git, modèle .env.example sans valeur.
  2. Préférer un gestionnaire de secretsCoffre-fort ou variables injectées au lancement plutôt qu’un fichier en clair.
  3. Limiter la portée des clésClés de développement, droits minimaux, environnement de test.
  4. Prévoir la rotationUne clé exposée se révoque et se remplace, sans attendre.
  5. Régler l’assistantRègles de refus ou fichiers d’exclusion pour les chemins sensibles.
  6. Ajouter un contrôle sur le postePour les cas que les réglages ne couvrent pas.
Six mesures, de la gestion des secrets au réglage de l’assistant (sources 1, 4 et 5).

Ces règles méritent une place dans la charte de l’organisation, à côté de celles qui concernent les assistants conversationnels : notre modèle de charte IA mentionne les codes d’accès parmi les données à ne jamais saisir. Pour les autres types de données, voir notre guide pour anonymiser ses données avant ChatGPT.

Questions fréquentes

Claude Code peut-il lire mon fichier .env ?

Oui, s’il en a la permission : l’outil lit les fichiers du projet pour accomplir ses tâches. La documentation de Claude Code indique comment l’en empêcher avec des règles de refus en lecture, par exemple Read(./.env) et Read(./secrets/**), et précise qu’un fichier .claudeignore n’a aucun effet.

Le fichier .cursorignore suffit-il à protéger mes secrets ?

C’est une protection utile, et les fichiers .env* sont ignorés par défaut. Mais la documentation de Cursor précise que les outils de terminal et MCP de l’agent ne peuvent pas bloquer l’accès aux fichiers ignorés, et qu’une protection complète n’est pas garantie. Mieux vaut ne pas garder de secrets en clair dans le projet et ajouter un contrôle complémentaire.

Que faire si une clé API a été envoyée à un assistant de code ?

La considérer comme exposée : la révoquer, en créer une nouvelle et vérifier les journaux d’utilisation du service concerné. Si la clé donnait accès à des données personnelles, évaluer s’il s’agit d’une violation de données au sens du RGPD.

Les secrets peuvent-ils fuiter par une commande du terminal ?

Oui. Afficher un fichier, chercher dans tout le projet ou lister les variables d’environnement produit une sortie que l’assistant lit. Les règles qui portent sur des noms de fichiers ne couvrent pas tous ces cas, comme le reconnaissent les documentations de Claude Code et de Cursor ; le bac à sable et un contrôle qui analyse la commande et son contenu réduisent ce risque.

Sources

  1. Configure permissions. Documentation de Claude Code, Anthropic. Consulté le 8 octobre 2026.
  2. Hooks reference. Documentation de Claude Code, Anthropic. Consulté le 8 octobre 2026.
  3. Settings reference: exclude sensitive files. Documentation de Claude Code, Anthropic. Consulté le 8 octobre 2026.
  4. Ignore file. Documentation de Cursor (Anysphere). Consulté le 8 octobre 2026.
  5. Secrets Management Cheat Sheet. OWASP Cheat Sheet Series. Consulté le 8 octobre 2026.
  6. The State of Secrets Sprawl 2026. GitGuardian, 17 mars 2026. Consulté le 8 octobre 2026.
  7. Recommandations de sécurité pour un système d’IA générative. ANSSI, 29 avril 2024. Consulté le 5 octobre 2026.
  8. About secret scanning. GitHub Docs. Consulté le 8 octobre 2026.
Une mesure parmi d’autres

Encadrer l’usage, sans freiner vos équipes

Tacite-IA repère les données sensibles dans les messages et les fichiers avant leur envoi aux assistants IA dans Chrome et Edge, ainsi que dans les assistants de code (Claude Code, Cursor, Windsurf, Codex, Gemini CLI, Copilot CLI). L’analyse se fait à 100 % sur le poste, sans IA, avec une console d’administration et un mode audit. Les applications de bureau (ChatGPT pour ordinateur, onglet Chat de Claude Desktop, Copilot de Windows) ne sont pas couvertes.

6 € HT par utilisateur et par mois en annuel, 8 € HT en mensuel. Essai de 3 mois.

À lire aussi