Zabezpieczenie: maskowanie kluczy API i haseł
# 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ście | Oczekiwane |
|---|---|
| AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE | Zablokuj |
| token: ghp_000000000000000000000000000000000000 | Zablokuj |
| ANTHROPIC_API_KEY=sk-ant-00000000000000000000000000000000 | Zablokuj |
| STRIPE_SECRET=sk_live_0000000000000000000000 | Zablokuj |
| DATABASE_URL=postgres://admin:S3cretPass@db.internal:5432/app | Zablokuj |
| -----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA0000000000000000 -----END RSA PRIVATE KEY----- | Zablokuj |
| Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIwMDAwMDAifQ.0000000000000000000000 | Zablokuj |
| 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- Identyfikator
- contextetech--maskowanie-sekretow-kluczy-api
- Plik
- maskowanie-sekretow-kluczy-api.guardrail.json
- Format
- JSON (application/json)
- Rozmiar
- 2566 bajtów (2,5 KB)
- Kodowanie
- UTF-8
- Szacowane tokeny
- ≈ 701
- Użycie komercyjne
- Dozwolone
- Dane osobowe
- Brak
- Wersja
- 1.0
- Opublikowano
- 10 października 2026 04:24
- Zaktualizowano
- 16 października 2026 23:20
- Przechowywanie
- w bazie danych
Statystyki
Polubienia : 0 · Komentarze : 0
Kliknij licznik, aby go pokazać lub ukryć; najedź na wykres, aby zobaczyć szczegóły. Jedno wyświetlenie na odwiedzającego dziennie, bez botów; liczenie od 30 września 2026.
Szacowany koszt
- Tokeny wejściowe na wywołanie
- ≈ 1044
| Model | Za wywołanie | Miesięcznie |
|---|---|---|
| GPT-6 Luna · OpenAInajlepsza cena | 0,00009 € | 0,09 € |
| DeepSeek Flash · DeepSeek | 0,00028 € | 0,28 € |
| Mistral Large · Mistral AI | 0,00046 € | 0,46 € |
| DeepSeek V4 Pro · DeepSeek | 0,00121 € | 1,21 € |
| GPT-6 Sol · OpenAI | 0,00184 € | 1,84 € |
| Claude Sonnet 5.5 · Anthropic | 0,00184 € | 1,84 € |
| Claude Opus 5.5 · Anthropic | 0,00368 € | 3,68 € |
| Model open source hostowany samodzielnie (Ollama, vLLM) | 0 € opłat za API (tylko koszt serwera) | |
Tylko koszt wejścia, bez odpowiedzi modelu. Publiczne standardowe ceny dostawców (Mistral AI, DeepSeek, OpenAI, Anthropic) przeliczone z USD na euro po kursie EBC z 13 października 2026. Szacunek: 1 token ≈ 3,6 znaku.
Wspólne dla 3 regionów
Stworzone przez autora, bez źródła zewnętrznego.
Użycie komercyjne dozwolone · wskazać autora · zmiany dozwolone.
Tylko tekst lub dane: bez dostępu do plików, sieci ani poleceń.
Hostowane we Francji (Scaleway, Paryż). Bez transferu poza UE.
Unia Europejska · 5/5
Brak danych osobowych.
Brak danych treningowych: podsumowanie nie jest wymagane.
Stany Zjednoczone · 5/5
Brak danych osobowych.
Brak danych treningowych: brak dokumentacji do opublikowania.
Chiny · 5/5
Brak danych osobowych.
Brak danych treningowych; treści generowane przez AI publikowane w Chinach muszą być oznaczone (2025).
Orientacyjne podsumowanie na dzień 30/09/2026, bez wartości certyfikacji prawnej. Metoda i źródła →
Jakość treści
Szczegółowe kryteria są dostępne dla członków.
Każde kryterium, odjęte punkty i wskazówka, jak poprawić każde z nich.
Analiza treści
Szczegółowe kryteria są dostępne dla członków.
Każde kryterium, odjęte punkty i wskazówka, jak poprawić każde z nich.
Obliczone na podstawie treści zasobu, za pomocą reguł, bez AI. Ocena jest w zakładce Jakość.
MCP contexte
https://contextetech.com/mcp
wczytaj qvquyt
Dodaj adres jako konektor w ustawieniach aplikacji AI, a potem wyślij powyższe polecenie.
API
import json, urllib.request url = "https://contextetech.com/api/resources/contextetech--maskowanie-sekretow-kluczy-api" fiche = json.load(urllib.request.urlopen(url)) print(fiche["title"] or fiche["name"])
maskowanie-sekretow-kluczy-api.guardrail.json
{
"format": "contextetech/guardrail/v1",
"id": "contextetech/maskowanie-sekretow-kluczy-api",
"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.",
"license": "MIT",
"language": "pl",
"type": "other",
"action": "mask",
"rules": "Przed wysłaniem do AI zamaskuj każdy sekret, który daje dostęp do konta lub usługi:\n- klucze API (OpenAI, Anthropic, Mistral, Stripe, AWS…) i tokeny dostępu (GitHub, JWT);\n- hasła zapisane jawnym tekstem (haslo=…, password: …);\n- klucze prywatne (-----BEGIN … PRIVATE KEY-----);\n- dane logowania w adresie (postgres://uzytkownik:haslo@serwer).\nPrzepuszczaj: 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.\nStosuj przed wklejeniem pliku .env, eksportu bazy danych lub logów do asystenta.",
"cases": [
{
"input": "AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE",
"expected": "block"
},
{
"input": "token: ghp_000000000000000000000000000000000000",
"expected": "block"
},
{
"input": "ANTHROPIC_API_KEY=sk-ant-00000000000000000000000000000000",
"expected": "block"
},
{
"input": "STRIPE_SECRET=sk_live_0000000000000000000000",
"expected": "block"
},
{
"input": "DATABASE_URL=postgres://admin:S3cretPass@db.internal:5432/app",
"expected": "block"
},
{
"input": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEA0000000000000000\n-----END RSA PRIVATE KEY-----",
"expected": "block"
},
{
"input": "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIwMDAwMDAifQ.0000000000000000000000",
"expected": "block"
},
{
"input": "haslo = Lato2026!",
"expected": "block"
},
{
"input": "Hasło musi mieć co najmniej 12 znaków.",
"expected": "allow"
},
{
"input": "Zastąp TWOJ_KLUCZ_API kluczem ze swojego konta.",
"expected": "allow"
},
{
"input": "Dokumentacja jest pod adresem https://docs.przyklad.pl/api.",
"expected": "allow"
},
{
"input": "Commit a1b2c3d naprawia błąd logowania.",
"expected": "allow"
},
{
"input": "Zamówienie nr 2026-10-458712 zostało wysłane.",
"expected": "allow"
},
{
"input": "Zaloguj się na swoje zwykłe konto.",
"expected": "allow"
}
]
}Sprawdź tekst (Python)
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.