Accedi Pubblica
contextetech/

Salvaguardia: oscurare chiavi API e password

v1
Contexte Tech

254 pubblicazione/i · 320 utilizzi

Istruzione Italiano Licenza: MIT aggiornato l’altro ieri
# Salvaguardia: oscurare chiavi API e password
code: 1pzvgol | type: guardrail | language: it | licence: MIT | version: v1
description: Salvaguardia che oscura chiavi API, token, password, chiavi private e stringhe di connessione prima di inviare un testo, un file o un'esportazione a un'IA. Regole, 14 casi di test, codice.
page: https://contextetech.com/it/salvaguardie/oscurare-segreti-chiavi-api-1pzvgol
mcp: connect https://contextetech.com/mcp then call load_resource with code "1pzvgol" (or ask "load 1pzvgol")
json: https://contextetech.com/api/resources/contextetech--oscurare-segreti-chiavi-api
python: pip install contexte && contexte get 1pzvgol
citation (required by the licence): contextetech. (2026). Salvaguardia: oscurare chiavi API e password (Version 1) [Salvaguardia]. Contexte Tech. https://contextetech.com/it/salvaguardie/oscurare-segreti-chiavi-api-1pzvgol

Salvaguardia che oscura chiavi API, token, password, chiavi private e stringhe di connessione prima di inviare un testo, un file o un'esportazione a un'IA. Regole, 14 casi di test, codice.

Regole

Oscurare prima dell'invio all'IA ogni segreto che dà accesso a un account o a un servizio:
- chiavi API (OpenAI, Anthropic, Mistral, Stripe, AWS…) e token di accesso (GitHub, JWT);
- password scritte in chiaro (password=…, pwd: …);
- chiavi private (-----BEGIN … PRIVATE KEY-----);
- credenziali dentro un indirizzo (postgres://utente:password@server).
Lasciar passare: valori di esempio (TUA_CHIAVE_API, xxx, <chiave>), indirizzi senza credenziali, numeri d'ordine o di commit, testi che parlano di password senza contenerne.
Da applicare prima di incollare un file .env, un'esportazione del database o dei log in un assistente.

Casi di test

InputAtteso
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLEBloccare
token: ghp_000000000000000000000000000000000000Bloccare
ANTHROPIC_API_KEY=sk-ant-00000000000000000000000000000000Bloccare
STRIPE_SECRET=sk_live_0000000000000000000000Bloccare
DATABASE_URL=postgres://admin:S3cretPass@db.internal:5432/appBloccare
-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA0000000000000000 -----END RSA PRIVATE KEY-----Bloccare
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIwMDAwMDAifQ.0000000000000000000000Bloccare
password = Estate2026!Bloccare
La password deve avere almeno 12 caratteri.Consentire
Sostituisci TUA_CHIAVE_API con la chiave del tuo account.Consentire
La documentazione è su https://docs.esempio.it/api.Consentire
Il commit a1b2c3d corregge il bug di accesso.Consentire
Ordine n. 2026-10-458712 spedito.Consentire
Accedi con il tuo account abituale.Consentire

Codice

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|parola_chiave|chiave)\s*[:=]\s*[\"']?[^\s\"']{6,}",
}
PLACEHOLDERS = ("xxx", "...", "<", "your", "tua_", "example_value")

def mask_secrets(text: str) -> tuple[str, bool]:
    """Sostituisce i segreti con [tipo oscurato]; restituisce il testo e True se qualcosa è stato oscurato."""
    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} oscurato]"
        text = re.sub(pattern, repl, text)
    return text, found

Community

Ancora nessun commento. Condividi la tua esperienza, aiuterà chi viene dopo.