Zaloguj się Opublikuj
contextetech/

Zabezpieczenie: maskowanie kluczy API i haseł

v1
Contexte Tech

Publikacje: 254 · 322 użyć

Instrukcja Polski Licencja: MIT zaktualizowano przedwczoraj
# Zabezpieczenie: maskowanie kluczy API i haseł
code: qvquyt | type: guardrail | language: pl | licence: MIT | version: v1
description: Zabezpieczenie, które maskuje klucze API, tokeny, hasła, klucze prywatne i ciągi połączeń, zanim tekst, plik lub eksport trafi do AI. Reguły, 14 przypadków testowych, kod.
page: https://contextetech.com/pl/zabezpieczenia/maskowanie-sekretow-kluczy-api-qvquyt
mcp: connect https://contextetech.com/mcp then call load_resource with code "qvquyt" (or ask "load qvquyt")
json: https://contextetech.com/api/resources/contextetech--maskowanie-sekretow-kluczy-api
python: pip install contexte && contexte get qvquyt
citation (required by the licence): contextetech. (2026). Zabezpieczenie: maskowanie kluczy API i haseł (Version 1) [Zabezpieczenie]. Contexte Tech. https://contextetech.com/pl/zabezpieczenia/maskowanie-sekretow-kluczy-api-qvquyt

Zabezpieczenie, które maskuje klucze API, tokeny, hasła, klucze prywatne i ciągi połączeń, zanim tekst, plik lub eksport trafi do AI. Reguły, 14 przypadków testowych, kod.

Reguły

Przed wysłaniem do AI zamaskuj każdy sekret, który daje dostęp do konta lub usługi:
- klucze API (OpenAI, Anthropic, Mistral, Stripe, AWS…) i tokeny dostępu (GitHub, JWT);
- hasła zapisane jawnym tekstem (haslo=…, password: …);
- klucze prywatne (-----BEGIN … PRIVATE KEY-----);
- dane logowania w adresie (postgres://uzytkownik:haslo@serwer).
Przepuszczaj: wartości przykładowe (TWOJ_KLUCZ_API, xxx, <klucz>), adresy bez danych logowania, numery zamówień lub commitów, tekst o hasłach, który żadnego nie zawiera.
Stosuj przed wklejeniem pliku .env, eksportu bazy danych lub logów do asystenta.

Przypadki testowe

WejścieOczekiwane
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLEZablokuj
token: ghp_000000000000000000000000000000000000Zablokuj
ANTHROPIC_API_KEY=sk-ant-00000000000000000000000000000000Zablokuj
STRIPE_SECRET=sk_live_0000000000000000000000Zablokuj
DATABASE_URL=postgres://admin:S3cretPass@db.internal:5432/appZablokuj
-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA0000000000000000 -----END RSA PRIVATE KEY-----Zablokuj
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIwMDAwMDAifQ.0000000000000000000000Zablokuj
haslo = Lato2026!Zablokuj
Hasło musi mieć co najmniej 12 znaków.Zezwól
Zastąp TWOJ_KLUCZ_API kluczem ze swojego konta.Zezwól
Dokumentacja jest pod adresem https://docs.przyklad.pl/api.Zezwól
Commit a1b2c3d naprawia błąd logowania.Zezwól
Zamówienie nr 2026-10-458712 zostało wysłane.Zezwól
Zaloguj się na swoje zwykłe konto.Zezwól

Kod

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

def mask_secrets(text: str) -> tuple[str, bool]:
    """Zastępuje sekrety przez [typ zamaskowany]; zwraca tekst i True, jeśli coś zamaskowano."""
    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} zamaskowany]"
        text = re.sub(pattern, repl, text)
    return text, found

Społeczność

Brak komentarzy. Podziel się opinią, pomoże to kolejnej osobie.