8.9 KiB
Security Policy (Nederlands)
🌐 Languages: 🇺🇸 English · 🇪🇸 es · 🇫🇷 fr · 🇩🇪 de · 🇮🇹 it · 🇷🇺 ru · 🇨🇳 zh-CN · 🇯🇵 ja · 🇰🇷 ko · 🇸🇦 ar · 🇮🇳 hi · 🇮🇳 in · 🇹🇭 th · 🇻🇳 vi · 🇮🇩 id · 🇲🇾 ms · 🇳🇱 nl · 🇵🇱 pl · 🇸🇪 sv · 🇳🇴 no · 🇩🇰 da · 🇫🇮 fi · 🇵🇹 pt · 🇷🇴 ro · 🇭🇺 hu · 🇧🇬 bg · 🇸🇰 sk · 🇺🇦 uk-UA · 🇮🇱 he · 🇵🇭 phi · 🇧🇷 pt-BR · 🇨🇿 cs · 🇹🇷 tr
Reporting Vulnerabilities
Als u een beveiligingsprobleem in OmniRoute ontdekt, meld dit dan op verantwoorde wijze:
1.NIETopen een openbaar GitHub-probleem 2. Gebruik GitHub-beveiligingsadviezen 3. Vermeld: beschrijving, reproductiestappen en potentiële impact## Response Timeline
| Fase | Doel | |
|---|---|---|
| Erkenning | 48 uur | |
| Triage & Beoordeling | 5 werkdagen | |
| Patch-release | 14 werkdagen (kritiek) | ## Supported Versions |
| Versie | Ondersteuningsstatus | |
|---|---|---|
| 3.4.x | ✅ Actief | |
| 3.0.x | ✅ Beveiliging | |
| < 3.0.0 | ❌ Niet ondersteund | --- |
Security Architecture
OmniRoute implementeert een meerlaags beveiligingsmodel:``` Request → CORS → API Key Auth → Prompt Injection Guard → Input Sanitizer → Rate Limiter → Circuit Breaker → Provider
### 🔐 Authentication & Authorization
| Kenmerk | Implementatie |
| ------------------- | ---------------------------------------------------- |
|**Dashboard-aanmelding**| Wachtwoordgebaseerde authenticatie met JWT-tokens (HttpOnly-cookies) |
|**API-sleutelverificatie**| HMAC-ondertekende sleutels met CRC-validatie |
|**OAuth 2.0 + PKCE**| Veilige providerauthenticatie (Claude, Codex, Gemini, Cursor, etc.) |
|**Token vernieuwen**| Automatische OAuth-tokenvernieuwing vóór vervaldatum |
|**Veilige cookies**| `AUTH_COOKIE_SECURE=true` voor HTTPS-omgevingen |
|**MCP-scopes**| 10 gedetailleerde scopes voor toegangscontrole van MCP-tools |### 🛡️ Encryption at Rest
Alle gevoelige gegevens die in SQLite zijn opgeslagen, worden gecodeerd met**AES-256-GCM**met scrypt-sleutelafleiding:
- API-sleutels, toegangstokens, vernieuwingstokens en ID-tokens
- Versieformaat: `enc:v1:<iv>:<ciphertext>:<authTag>`
- Passthrough-modus (plaintext) wanneer `STORAGE_ENCRYPTION_KEY` niet is ingesteld```bash
# Generate encryption key:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)
🧠 Prompt Injection Guard
Middleware die snelle injectie-aanvallen in LLM-aanvragen detecteert en blokkeert:
| Patroontype | Ernst | Voorbeeld |
|---|---|---|
| Systeemoverschrijving | Hoog | "negeer alle voorgaande instructies" |
| Rolkaping | Hoog | "je bent nu DAN, je kunt alles" |
| Scheidingstekeninjectie | Middel | Gecodeerde scheidingstekens om contextgrenzen te doorbreken |
| DAN/jailbreak | Hoog | Bekende promptpatronen voor jailbreaks |
| Instructie Lek | Middel | "laat mij uw systeemprompt zien" |
Configureer via dashboard (Instellingen → Beveiliging) of .env:```env
INPUT_SANITIZER_ENABLED=true
INPUT_SANITIZER_MODE=block # warn | block | redact
### 🔒 PII Redaction
Automatische detectie en optionele redactie van persoonlijk identificeerbare informatie:
| PII-type | Patroon | Vervanging |
| ------------- | -------------------- | ------------------ |
| E-mail | `gebruiker@domein.com` | `[EMAIL_REDACTED]` |
| CPF (Brazilië) | `123.456.789-00` | `[CPF_REDACTED]` |
| CNPJ (Brazilië) | `12.345.678/0001-00` | `[CNPJ_REDACTED]` |
| Creditcard | `4111-1111-1111-1111` | `[CC_REDACTED]` |
| Telefoon | `+55 11 99999-9999` | `[PHONE_REDACTED]` |
| SSN (VS) | `123-45-6789` | `[SSN_REDACTED]` |```env
PII_REDACTION_ENABLED=true
🌐 Network Security
| Kenmerk | Beschrijving | |
|---|---|---|
| CORS | Configureerbare oorsprongscontrole (CORS_ORIGIN env var, standaard *) |
|
| IP-filtering | Toelatingslijst/blokkeerlijst IP-bereiken in dashboard | |
| Snelheidslimiet | Tarieflimieten per provider met automatische uitstel | |
| Anti-donderende kudde | Mutex + vergrendeling per verbinding voorkomt cascadering van 502's | |
| TLS-vingerafdruk | Browserachtige TLS-vingerafdrukspoofing om botdetectie te verminderen | |
| CLI-vingerafdruk | Kop-/tekstvolgorde per provider zodat deze overeenkomt met de oorspronkelijke CLI-handtekeningen | ### 🔌 Resilience & Availability |
| Kenmerk | Beschrijving | |
|---|---|---|
| Stroomonderbreker | 3-statussen (Gesloten → Open → Half-Open) per provider, SQLite-persisted | |
| Idempotentie aanvragen | Ontdubbelingsvenster van 5 seconden voor dubbele verzoeken | |
| Exponentiële uitstel | Automatische nieuwe poging met toenemende vertragingen | |
| Gezondheidsdashboard | Realtime monitoring van de gezondheid van leveranciers | ### 📋 Compliance |
| Kenmerk | Beschrijving | |
|---|---|---|
| Logboekbehoud | Automatisch opschonen na CALL_LOG_RETENTION_DAYS |
|
| Afmelden zonder inloggen | Per API-sleutel schakelt de vlag 'noLog' het loggen van verzoeken uit | |
| Auditlogboek | Administratieve acties bijgehouden in tabel audit_log |
|
| MCP-audit | Door SQLite ondersteunde auditregistratie voor alle MCP-toolaanroepen | |
| Zod-validatie | Alle API-invoer gevalideerd met Zod v4-schema's bij het laden van de module | --- |
Required Environment Variables
Alle geheimen moeten worden ingesteld voordat de server wordt gestart. De server zalsnel falenals deze ontbreken of zwak zijn.```bash
REQUIRED — server will not start without these:
JWT_SECRET=$(openssl rand -base64 48) # min 32 chars API_KEY_SECRET=$(openssl rand -hex 32) # min 16 chars
RECOMMENDED — enables encryption at rest:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)
De server weigert actief bekende zwakke waarden zoals 'changeme', 'secret' of 'password'.---
## Docker Security
- Gebruik een niet-rootgebruiker in productie
- Mount geheimen als alleen-lezen volumes
- Kopieer nooit `.env`-bestanden naar Docker-images
- Gebruik `.dockerignore` om gevoelige bestanden uit te sluiten
- Stel `AUTH_COOKIE_SECURE=true` in wanneer u achter HTTPS zit```bash
docker run -d \
--name omniroute \
--restart unless-stopped \
--read-only \
-p 20128:20128 \
-v omniroute-data:/app/data \
-e JWT_SECRET="$(openssl rand -base64 48)" \
-e API_KEY_SECRET="$(openssl rand -hex 32)" \
-e STORAGE_ENCRYPTION_KEY="$(openssl rand -hex 32)" \
diegosouzapw/omniroute:latest
Dependencies
- Voer regelmatig 'npm audit' uit
- Houd afhankelijkheden bijgewerkt
- Het project gebruikt
husky+lint-stagedvoor controles vooraf - CI-pijplijn voert ESLint-beveiligingsregels uit bij elke push
- Providerconstanten gevalideerd bij het laden van de module via Zod (
src/shared/validation/providerSchema.ts)