Files
OmniRoute/docs/i18n/cs/SECURITY.md
2026-03-19 16:02:28 +01:00

5.7 KiB

Bezpečnostní zásady

Hlášení zranitelností

Pokud v OmniRoute objevíte bezpečnostní zranitelnost, nahlaste ji prosím zodpovědně:

  1. NEOTVÍREJTE veřejný problém na GitHubu
  2. Používejte bezpečnostní doporučení GitHubu
  3. Zahrňte: popis, kroky reprodukce a potenciální dopad

Časová osa odezvy

Fáze Cíl
Potvrzení 48 hodin
Triáž a posouzení 5 pracovních dnů
Vydání záplaty 14 pracovních dnů (kritické)

Podporované verze

Verze Stav podpory
1.0.x Aktivní
0.8.x Bezpečnost
< 0,8,0 Nepodporováno

Bezpečnostní architektura

OmniRoute implementuje vícevrstvý bezpečnostní model:

Request → CORS → API Key Auth → Prompt Injection Guard → Input Sanitizer → Rate Limiter → Circuit Breaker → Provider

🔐 Ověřování a autorizace

Funkce Implementace
Přihlášení do ovládacího panelu Ověřování na základě hesla s tokeny JWT (soubory cookie HttpOnly)
Autorizace klíče API Klíče podepsané HMAC s ověřením CRC
OAuth 2.0 + PKCE Bezpečné ověřování poskytovatelů (Claude, Codex, Gemini, Cursor atd.)
Obnovení tokenu Automatická aktualizace tokenu OAuth před vypršením platnosti
Bezpečné soubory cookie AUTH_COOKIE_SECURE=true pro prostředí HTTPS

🛡️ Šifrování v klidovém stavu

Všechna citlivá data uložená v SQLite jsou šifrována pomocí AES-256-GCM s odvozením klíče scrypt:

  • Klíče API, přístupové tokeny, obnovovací tokeny a ID tokeny
  • Verzovaný formát: enc:v1:<iv>:<ciphertext>:<authTag>
  • Režim průchodu (prostý text), pokud není nastaven STORAGE_ENCRYPTION_KEY
# Generate encryption key:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)

🧠 Ochrana před okamžitou injekcí

Middleware, který detekuje a blokuje útoky prompt injection v požadavcích LLM:

Typ vzoru Závažnost Příklad
Přepsání systému Vysoký "ignorovat všechny předchozí pokyny"
Únos role Vysoký "Teď jsi DAN, dokážeš cokoli."
Vložení oddělovače Střední Kódované oddělovače pro přerušení hranic kontextu
DAN/Útěk z vězení Vysoký Známé vzory výzev k jailbreaku
Únik instrukcí Střední „Ukaž mi systémový výzvu“

Konfigurace přes ovládací panel (Nastavení → Zabezpečení) nebo .env :

INPUT_SANITIZER_ENABLED=true
INPUT_SANITIZER_MODE=block    # warn | block | redact

🔒 Redakční úprava osobních údajů

Automatická detekce a volitelná redakce osobních údajů:

Typ osobních údajů Vzor Nahrazení
E-mail user@domain.com [EMAIL_REDACTED]
CPF (Brazílie) 123.456.789-00 [CPF_REDACTED]
CNPJ (Brazílie) 12.345.678/0001-00 [CNPJ_REDACTED]
Kreditní karta 4111-1111-1111-1111 [CC_REDACTED]
Telefon +55 11 99999-9999 [PHONE_REDACTED]
Číslo sociálního zabezpečení (USA) 123-45-6789 [SSN_REDACTED]
PII_REDACTION_ENABLED=true

🌐 Zabezpečení sítě

Funkce Popis
CORS Konfigurovatelná kontrola původu (proměnná prostředí CORS_ORIGIN , výchozí nastavení * )
Filtrování IP adres Rozsahy IP adres na bílou/černou listinu v dashboardu
Omezení rychlosti Limity sazeb na poskytovatele s automatickým ukončením
Protihromové stádo Mutex + uzamčení pro každé připojení zabraňuje kaskádování 502.

🔌 Odolnost a dostupnost

Funkce Popis
Jistič 3 stavy (Zavřeno → Otevřeno → Polootevřeno) na poskytovatele, trvalé uložení v SQLite
Žádost o idempotenci 5sekundové okno pro odstranění duplicitních požadavků
Exponenciální odklon Automatické opakování s rostoucím zpožděním
Dashboard zdraví Monitorování stavu poskytovatele v reálném čase

📋 Dodržování předpisů

Funkce Popis
Uchovávání protokolů Automatické čištění po LOG_RETENTION_DAYS
Odhlášení bez ukládání protokolů Příznak noLog pro každý klíč API zakazuje protokolování požadavků.
Protokol auditu Administrativní akce sledované v tabulce audit_log

Požadované proměnné prostředí

Všechny tajné kódy musí být nastaveny před spuštěním serveru. Server rychle selže , pokud chybí nebo jsou slabé.

# 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)

Server aktivně odmítá známé slabé hodnoty, jako například changeme , secret nebo password .


Zabezpečení Dockeru

  • Použití uživatele bez oprávnění root v produkčním prostředí
  • Připojte tajné kódy jako svazky jen pro čtení
  • Nikdy nekopírujte soubory .env do imagí Dockeru
  • Použití .dockerignore k vyloučení citlivých souborů
  • Nastavit AUTH_COOKIE_SECURE=true při připojení za HTTPS
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

Závislosti

  • Pravidelně spouštějte npm audit
  • Udržujte závislosti aktualizované
  • Projekt používá pro kontroly před commitem husky + lint-staged
  • CI pipeline spouští bezpečnostní pravidla ESLint při každém odeslání.