Skyddsregel: maskera API-nycklar och lösenord
# Skyddsregel: maskera API-nycklar och lösenord code: 1w7s2lu | type: guardrail | language: sv | licence: MIT | version: v1 description: Skyddsregel som maskerar API-nycklar, token, lösenord, privata nycklar och anslutningssträngar innan en text, fil eller export skickas till en AI. Regler, 14 testfall, kod. page: https://contextetech.com/sv/skyddsregler/maskera-hemligheter-api-nycklar-1w7s2lu mcp: connect https://contextetech.com/mcp then call load_resource with code "1w7s2lu" (or ask "load 1w7s2lu") json: https://contextetech.com/api/resources/contextetech--maskera-hemligheter-api-nycklar python: pip install contexte && contexte get 1w7s2lu citation (required by the licence): contextetech. (2026). Skyddsregel: maskera API-nycklar och lösenord (Version 1) [Skyddsregel]. Contexte Tech. https://contextetech.com/sv/skyddsregler/maskera-hemligheter-api-nycklar-1w7s2lu
Skyddsregel som maskerar API-nycklar, token, lösenord, privata nycklar och anslutningssträngar innan en text, fil eller export skickas till en AI. Regler, 14 testfall, kod.
Regler
Maskera innan något skickas till AI:n varje hemlighet som ger åtkomst till ett konto eller en tjänst: - API-nycklar (OpenAI, Anthropic, Mistral, Stripe, AWS…) och åtkomsttoken (GitHub, JWT); - lösenord i klartext (losenord=…, password: …); - privata nycklar (-----BEGIN … PRIVATE KEY-----); - inloggningsuppgifter i en adress (postgres://anvandare:losenord@server). Släpp igenom: exempelvärden (DIN_API_NYCKEL, xxx, <nyckel>), adresser utan inloggningsuppgifter, order- eller commitnummer, text om lösenord som inte innehåller något. Använd innan du klistrar in en .env-fil, en databasexport eller loggar i en assistent.
Testfall
| Indata | Förväntat |
|---|---|
| AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE | Blockera |
| token: ghp_000000000000000000000000000000000000 | Blockera |
| ANTHROPIC_API_KEY=sk-ant-00000000000000000000000000000000 | Blockera |
| STRIPE_SECRET=sk_live_0000000000000000000000 | Blockera |
| DATABASE_URL=postgres://admin:S3cretPass@db.internal:5432/app | Blockera |
| -----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA0000000000000000 -----END RSA PRIVATE KEY----- | Blockera |
| Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIwMDAwMDAifQ.0000000000000000000000 | Blockera |
| losenord = Sommar2026! | Blockera |
| Lösenordet måste vara minst 12 tecken långt. | Tillåt |
| Ersätt DIN_API_NYCKEL med nyckeln från ditt konto. | Tillåt |
| Dokumentationen finns på https://docs.exempel.se/api. | Tillåt |
| Commit a1b2c3d rättar inloggningsfelet. | Tillåt |
| Order nr 2026-10-458712 har skickats. | Tillåt |
| Logga in med ditt vanliga konto. | Tillåt |
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|losenord)\s*[:=]\s*[\"']?[^\s\"']{6,}",
}
PLACEHOLDERS = ("xxx", "...", "<", "your", "din_", "example_value")
def mask_secrets(text: str) -> tuple[str, bool]:
"""Ersätter hemligheter med [typ maskerad]; returnerar texten och True om något maskerades."""
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} maskerad]"
text = re.sub(pattern, repl, text)
return text, found- Identifierare
- contextetech--maskera-hemligheter-api-nycklar
- Fil
- maskera-hemligheter-api-nycklar.guardrail.json
- Format
- JSON (application/json)
- Storlek
- 2 577 byte (2,5 KB)
- Teckenkodning
- UTF-8
- Uppskattade tokens
- ≈ 708
- Kommersiell användning
- Tillåten
- Personuppgifter
- Inga
- Version
- 1.0
- Publicerad
- 10 oktober 2026 kl. 04:24
- Uppdaterad
- 16 oktober 2026 kl. 23:20
- Lagring
- i databasen
Statistik
Gillamarkeringar : 0 · Kommentarer : 0
Klicka på en räknare för att visa eller dölja den, för muspekaren över diagrammet för detaljer. En visning per besökare och dag, robotar undantagna; räkningen startade den 30 september 2026.
Uppskattad kostnad
- Indatatokens per anrop
- ≈ 1 051
| Modell | Per anrop | Per månad |
|---|---|---|
| GPT-6 Luna · OpenAIbästa pris | 0,00009 € | 0,09 € |
| DeepSeek Flash · DeepSeek | 0,00028 € | 0,28 € |
| Mistral Large · Mistral AI | 0,00046 € | 0,46 € |
| DeepSeek V4 Pro · DeepSeek | 0,00122 € | 1,22 € |
| GPT-6 Sol · OpenAI | 0,00185 € | 1,85 € |
| Claude Sonnet 5.5 · Anthropic | 0,00185 € | 1,85 € |
| Claude Opus 5.5 · Anthropic | 0,00370 € | 3,70 € |
| Egendriftad öppen källkodsmodell (Ollama, vLLM) | 0 € i API-avgifter (endast serverkostnad) | |
Endast kostnaden för indata, utan modellens svar. Leverantörernas offentliga standardpriser (Mistral AI, DeepSeek, OpenAI, Anthropic) omräknade från USD till euro enligt ECB:s kurs den 13 oktober 2026. Uppskattning: 1 token ≈ 3,6 tecken.
Gemensamt för de 3 regionerna
Skapad av författaren, utan extern källa.
Kommersiell användning tillåten · ange upphovsperson · ändringar tillåtna.
Endast text eller data: ingen åtkomst till filer, nätverk eller kommandon.
Driftas i Frankrike (Scaleway, Paris). Ingen överföring utanför EU.
Europeiska unionen · 5/5
Inga personuppgifter.
Inga träningsdata: ingen sammanfattning krävs.
USA · 5/5
Inga personuppgifter.
Inga träningsdata: ingen dokumentation att publicera.
Kina · 5/5
Inga personuppgifter.
Inga träningsdata; AI-genererat innehåll som sprids i Kina måste märkas (2025).
Vägledande sammanfattning per 30/09/2026, utan värde som juridisk certifiering. Metod och källor →
Innehållets kvalitet
De detaljerade kriterierna är förbehållna medlemmar.
Varje kriterium, de avdragna poängen och ett tips för att åtgärda vart och ett.
Innehållsanalys
De detaljerade kriterierna är förbehållna medlemmar.
Varje kriterium, de avdragna poängen och ett tips för att åtgärda vart och ett.
Beräknat utifrån resursens innehåll, med regler, utan AI. Betyget finns på fliken Kvalitet.
MCP contexte
https://contextetech.com/mcp
ladda 1w7s2lu
Lägg till adressen som koppling i inställningarna för dina AI-appar och skicka sedan förfrågan ovan.
API
import json, urllib.request url = "https://contextetech.com/api/resources/contextetech--maskera-hemligheter-api-nycklar" fiche = json.load(urllib.request.urlopen(url)) print(fiche["title"] or fiche["name"])
maskera-hemligheter-api-nycklar.guardrail.json
{
"format": "contextetech/guardrail/v1",
"id": "contextetech/maskera-hemligheter-api-nycklar",
"description": "Skyddsregel som maskerar API-nycklar, token, lösenord, privata nycklar och anslutningssträngar innan en text, fil eller export skickas till en AI. Regler, 14 testfall, kod.",
"license": "MIT",
"language": "sv",
"type": "other",
"action": "mask",
"rules": "Maskera innan något skickas till AI:n varje hemlighet som ger åtkomst till ett konto eller en tjänst:\n- API-nycklar (OpenAI, Anthropic, Mistral, Stripe, AWS…) och åtkomsttoken (GitHub, JWT);\n- lösenord i klartext (losenord=…, password: …);\n- privata nycklar (-----BEGIN … PRIVATE KEY-----);\n- inloggningsuppgifter i en adress (postgres://anvandare:losenord@server).\nSläpp igenom: exempelvärden (DIN_API_NYCKEL, xxx, <nyckel>), adresser utan inloggningsuppgifter, order- eller commitnummer, text om lösenord som inte innehåller något.\nAnvänd innan du klistrar in en .env-fil, en databasexport eller loggar i en assistent.",
"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": "losenord = Sommar2026!",
"expected": "block"
},
{
"input": "Lösenordet måste vara minst 12 tecken långt.",
"expected": "allow"
},
{
"input": "Ersätt DIN_API_NYCKEL med nyckeln från ditt konto.",
"expected": "allow"
},
{
"input": "Dokumentationen finns på https://docs.exempel.se/api.",
"expected": "allow"
},
{
"input": "Commit a1b2c3d rättar inloggningsfelet.",
"expected": "allow"
},
{
"input": "Order nr 2026-10-458712 har skickats.",
"expected": "allow"
},
{
"input": "Logga in med ditt vanliga konto.",
"expected": "allow"
}
]
}Kontrollera en text (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|losenord)\s*[:=]\s*[\"']?[^\s\"']{6,}",
}
PLACEHOLDERS = ("xxx", "...", "<", "your", "din_", "example_value")
def mask_secrets(text: str) -> tuple[str, bool]:
"""Ersätter hemligheter med [typ maskerad]; returnerar texten och True om något maskerades."""
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} maskerad]"
text = re.sub(pattern, repl, text)
return text, found
Gemenskap
Inga kommentarer ännu. Dela din erfarenhet, det hjälper nästa person.