Iniciar sesión Publicar
contextetech/

Salvaguarda: ocultar claves de API y contraseñas

v1
Contexte Tech

254 publicación(es) · 320 usos

Instrucción Español Licencia: MIT actualizado anteayer
# Salvaguarda: ocultar claves de API y contraseñas
code: mfkhts | type: guardrail | language: es | licence: MIT | version: v1
description: Salvaguarda que oculta claves de API, tokens, contraseñas, claves privadas y cadenas de conexión antes de enviar un texto, un archivo o una exportación a una IA. Reglas, 14 casos de prueba, código.
page: https://contextetech.com/es/salvaguardas/ocultar-secretos-claves-api-mfkhts
mcp: connect https://contextetech.com/mcp then call load_resource with code "mfkhts" (or ask "load mfkhts")
json: https://contextetech.com/api/resources/contextetech--ocultar-secretos-claves-api
python: pip install contexte && contexte get mfkhts
citation (required by the licence): contextetech. (2026). Salvaguarda: ocultar claves de API y contraseñas (Version 1) [Salvaguarda]. Contexte Tech. https://contextetech.com/es/salvaguardas/ocultar-secretos-claves-api-mfkhts

Salvaguarda que oculta claves de API, tokens, contraseñas, claves privadas y cadenas de conexión antes de enviar un texto, un archivo o una exportación a una IA. Reglas, 14 casos de prueba, código.

Reglas

Ocultar antes de enviar a la IA cualquier secreto que dé acceso a una cuenta o a un servicio:
- claves de API (OpenAI, Anthropic, Mistral, Stripe, AWS…) y tokens de acceso (GitHub, JWT);
- contraseñas escritas en claro (contrasena=…, password: …);
- claves privadas (-----BEGIN … PRIVATE KEY-----);
- credenciales dentro de una dirección (postgres://usuario:contraseña@servidor).
Dejar pasar: valores de ejemplo (TU_CLAVE_API, xxx, <clave>), direcciones sin credenciales, números de pedido o de commit, textos que hablan de contraseñas sin contener ninguna.
Aplicar antes de pegar un archivo .env, una exportación de base de datos o registros en un asistente.

Casos de prueba

EntradaEsperado
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLEBloquear
token: ghp_000000000000000000000000000000000000Bloquear
ANTHROPIC_API_KEY=sk-ant-00000000000000000000000000000000Bloquear
STRIPE_SECRET=sk_live_0000000000000000000000Bloquear
DATABASE_URL=postgres://admin:S3cretPass@db.internal:5432/appBloquear
-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA0000000000000000 -----END RSA PRIVATE KEY-----Bloquear
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIwMDAwMDAifQ.0000000000000000000000Bloquear
contrasena = Verano2026!Bloquear
La contraseña debe tener al menos 12 caracteres.Permitir
Sustituya TU_CLAVE_API por la clave de su cuenta.Permitir
La documentación está en https://docs.ejemplo.es/api.Permitir
El commit a1b2c3d corrige el error de inicio de sesión.Permitir
Pedido n.º 2026-10-458712 enviado.Permitir
Inicie sesión con su cuenta habitual.Permitir

Código

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

def mask_secrets(text: str) -> tuple[str, bool]:
    """Sustituye los secretos por [tipo oculto]; devuelve el texto y True si se ha ocultado algo."""
    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} oculto]"
        text = re.sub(pattern, repl, text)
    return text, found

Comunidad

Aún no hay comentarios. Comparte tu opinión, ayudará a los siguientes.