Inloggen Publiceren
contextetech/

Vangrail: API-sleutels en wachtwoorden maskeren

v1
Contexte Tech

254 publicatie(s) · 320 keer gebruikt

Instructie Nederlands Licentie: MIT bijgewerkt eergisteren
# Vangrail: API-sleutels en wachtwoorden maskeren
code: 1wl94sp | type: guardrail | language: nl | licence: MIT | version: v1
description: Vangrail die API-sleutels, tokens, wachtwoorden, privésleutels en verbindingsstrings maskeert voordat een tekst, bestand of export naar een AI gaat. Regels, 14 testgevallen, code.
page: https://contextetech.com/nl/vangrails/geheimen-api-sleutels-maskeren-1wl94sp
mcp: connect https://contextetech.com/mcp then call load_resource with code "1wl94sp" (or ask "load 1wl94sp")
json: https://contextetech.com/api/resources/contextetech--geheimen-api-sleutels-maskeren
python: pip install contexte && contexte get 1wl94sp
citation (required by the licence): contextetech. (2026). Vangrail: API-sleutels en wachtwoorden maskeren (Version 1) [Vangrail]. Contexte Tech. https://contextetech.com/nl/vangrails/geheimen-api-sleutels-maskeren-1wl94sp

Vangrail die API-sleutels, tokens, wachtwoorden, privésleutels en verbindingsstrings maskeert voordat een tekst, bestand of export naar een AI gaat. Regels, 14 testgevallen, code.

Regels

Maskeer vóór het versturen naar de AI elk geheim dat toegang geeft tot een account of dienst:
- API-sleutels (OpenAI, Anthropic, Mistral, Stripe, AWS…) en toegangstokens (GitHub, JWT);
- wachtwoorden in leesbare tekst (wachtwoord=…, password: …);
- privésleutels (-----BEGIN … PRIVATE KEY-----);
- inloggegevens in een adres (postgres://gebruiker:wachtwoord@server).
Doorlaten: voorbeeldwaarden (JOUW_API_SLEUTEL, xxx, <sleutel>), adressen zonder inloggegevens, order- of commitnummers, tekst over wachtwoorden zonder wachtwoord.
Toepassen voordat je een .env-bestand, een database-export of logs in een assistent plakt.

Testgevallen

InvoerVerwacht
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLEBlokkeren
token: ghp_000000000000000000000000000000000000Blokkeren
ANTHROPIC_API_KEY=sk-ant-00000000000000000000000000000000Blokkeren
STRIPE_SECRET=sk_live_0000000000000000000000Blokkeren
DATABASE_URL=postgres://admin:S3cretPass@db.internal:5432/appBlokkeren
-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA0000000000000000 -----END RSA PRIVATE KEY-----Blokkeren
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIwMDAwMDAifQ.0000000000000000000000Blokkeren
wachtwoord = Zomer2026!Blokkeren
Het wachtwoord moet minstens 12 tekens lang zijn.Toestaan
Vervang JOUW_API_SLEUTEL door de sleutel van je account.Toestaan
De documentatie staat op https://docs.voorbeeld.nl/api.Toestaan
Commit a1b2c3d lost de inlogfout op.Toestaan
Bestelling nr. 2026-10-458712 is verzonden.Toestaan
Log in met je gewone account.Toestaan

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

def mask_secrets(text: str) -> tuple[str, bool]:
    """Vervangt geheimen door [type gemaskeerd]; geeft de tekst terug en True als er iets gemaskeerd is."""
    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} gemaskeerd]"
        text = re.sub(pattern, repl, text)
    return text, found

Community

Nog geen reacties. Deel je ervaring, daar heeft de volgende iets aan.