Connexion Publier
contextetech/

Garde-fou : masquer clés d'API et mots de passe

v1
Contexte Tech

254 publication(s) · 353 utilisations

Instruction Français Licence : MIT mis à jour il y a 3 jours
# Garde-fou : masquer clés d'API et mots de passe
code: 108x85u | type: guardrail | language: fr | licence: MIT | version: v1
description: Garde-fou qui masque clés d'API, jetons, mots de passe, clés privées et chaînes de connexion avant d'envoyer un texte, un fichier ou un export à une IA. Règles, 14 cas de test, code.
page: https://contextetech.com/garde-fous/masquer-secrets-cles-api-108x85u
mcp: connect https://contextetech.com/mcp then call load_resource with code "108x85u" (or ask "load 108x85u")
json: https://contextetech.com/api/resources/contextetech--masquer-secrets-cles-api
python: pip install contexte && contexte get 108x85u
citation (required by the licence): contextetech. (2026). Garde-fou : masquer clés d'API et mots de passe (Version 1) [Garde-fou]. Contexte Tech. https://contextetech.com/garde-fous/masquer-secrets-cles-api-108x85u

Garde-fou qui masque clés d'API, jetons, mots de passe, clés privées et chaînes de connexion avant d'envoyer un texte, un fichier ou un export à une IA. Règles, 14 cas de test, code.

Règles

Masquer avant l'envoi à l'IA tout secret qui donne accès à un compte ou à un service :
- clés d'API (OpenAI, Anthropic, Mistral, Stripe, AWS…) et jetons d'accès (GitHub, JWT) ;
- mots de passe écrits en clair (mot_de_passe=…, password: …) ;
- clés privées (-----BEGIN … PRIVATE KEY-----) ;
- identifiants dans une adresse (postgres://utilisateur:motdepasse@serveur).
Laisser passer : les valeurs d'exemple (VOTRE_CLE, xxx, <clé>), les adresses sans identifiant, les identifiants de commande ou de commit, le texte qui parle de mots de passe sans en contenir.
À appliquer avant de coller un fichier .env, un export de base ou des journaux dans un assistant.

Cas de test

EntréeAttendu
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLEBloquer
token: ghp_000000000000000000000000000000000000Bloquer
ANTHROPIC_API_KEY=sk-ant-00000000000000000000000000000000Bloquer
STRIPE_SECRET=sk_live_0000000000000000000000Bloquer
DATABASE_URL=postgres://admin:S3cretPass@db.internal:5432/appBloquer
-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA0000000000000000 -----END RSA PRIVATE KEY-----Bloquer
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIwMDAwMDAifQ.0000000000000000000000Bloquer
mot_de_passe = Soleil2026!Bloquer
Le mot de passe doit faire au moins 12 caractères.Laisser passer
Remplacez VOTRE_CLE_API par la clé de votre compte.Laisser passer
La documentation est sur https://docs.exemple.fr/api.Laisser passer
Le commit a1b2c3d corrige le bug de connexion.Laisser passer
Commande n° 2026-10-458712 expédiée.Laisser passer
Connectez-vous avec votre compte habituel.Laisser passer

Code

import re

PATTERNS = {
    "private_key": r"-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----",
    "aws_key": r"\bAKIA[0-9A-Z]{16}\b",
    "github_token": r"\bgh[pousr]_[A-Za-z0-9]{36,}\b",
    "llm_api_key": r"\bsk-(?:ant-|proj-)?[A-Za-z0-9_-]{20,}\b",
    "stripe_key": r"\b[sr]k_(?:live|test)_[A-Za-z0-9]{16,}\b",
    "jwt": r"\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b",
    "url_credentials": r"\b[a-z][a-z0-9+.-]*://[^\s:/@]+:[^\s@/]+@",
    "password_assignment": r"(?i)\b(?:password|passwd|pwd|secret|api_?key|token|mot_de_passe|mdp)\s*[:=]\s*[\"']?[^\s\"']{6,}",
}
PLACEHOLDERS = ("xxx", "...", "<", "your", "votre", "example_value")

def mask_secrets(text: str) -> tuple[str, bool]:
    """Remplace les secrets par [type masqué] ; renvoie le texte et True si quelque chose a été masqué."""
    found = False
    for name, pattern in PATTERNS.items():
        def repl(m):
            nonlocal found
            if any(p in m.group(0).lower() for p in PLACEHOLDERS):
                return m.group(0)
            found = True
            return f"[{name} masqué]"
        text = re.sub(pattern, repl, text)
    return text, found

Communauté

Pas encore de commentaire. Partagez votre retour, il aidera les suivants.