Bezpečnosť
Všetko nižšie popisuje systém tak, ako naozaj beží — overené priamo na produkčnom stroji, nie odpísané zo šablóny politiky. Kde opatrenie neexistuje, táto stránka to povie, namiesto toho aby ho vynechala.
Hlásenie zraniteľnosti: [email protected] · security.txt (RFC 9116)
Kde dáta žijú
Všetky produkčné dáta ležia na hardvéri prevádzkovanom firmou Hetzner Online GmbH v lokalite Norimberg (nbg1), Nemecko. Neexistuje riadená databáza tretej strany ani replika mimo EÚ: PostgreSQL, connection pooler aj vyhľadávací engine bežia na tom jednom stroji.
Databáza nie je dostupná z internetu. PostgreSQL, pooler, vyhľadávací engine aj aplikačný proces sú naviazané na loopback rozhranie; zvonku odpovedajú len porty HTTP, HTTPS a SSH. SSH prijíma výhradne verejné kľúče — heslová a keyboard-interactive autentifikácia je vypnutá — a opakované zlyhania sa automaticky blokujú.
Webové fonty servírujeme z vlastného origin servera, takže vykreslenie stránky neodovzdá IP adresu návštevníka font CDN. Úplný zoznam tretích strán, ktoré prichádzajú do styku s dátami, je zverejnený osobitne. Sub-processory →
Dáta pri prenose
Virtuálny host entyrix.com dojednáva výhradne TLS 1.2 a TLS 1.3; staršie verzie protokolu neponúka. HSTS je nastavené na jeden rok vrátane subdomén, takže prehliadač, ktorý stránku raz videl, odmietne prejsť na nešifrovaný prenos.
Každá odpoveď nesie content security policy, ktorá blokuje pluginy aj rámovanie tretími stranami a viaže odosielanie formulárov na náš vlastný origin, spolu s ochranou proti MIME-sniffingu, politikou no-referrer a permissions policy, ktorá vypína kameru, mikrofón, geolokáciu, platby a ďalšie mocné prehliadačové API. Dajú sa prečítať z ľubovoľnej odpovede jedinou požiadavkou.
curl -sI https://entyrix.com/ | grep -i strict-transport
Prihlasovacie údaje a osobné údaje
| Opatrenie | Ako |
|---|---|
| API kľúče sa nikdy neukladajú v čitateľnej podobe | SHA-256 odtlačok pri autentifikácii (src/api/middleware/auth.ts) |
| IP adresy sa nikdy neukladajú v surovej podobe | SHA-256 z IP a soli, ktorá sa mení o polnoci UTC, takže korelácia naprieč dňami je zámerne ťažká (src/lib/ip-hash.ts) |
| Prístup k osobným údajom sa loguje pri každej odpovedi | Riadok v gdpr.access_log pre každú odpoveď na route s osobnými údajmi — z toho sa odpovedá na žiadosť dotknutej osoby aj na vyšetrovanie zneužitia |
| Autentifikačné tajomstvá sa porovnávajú v konštantnom čase | crypto.timingSafeEqual s kontrolou dĺžky, takže nesprávny token neprezradí nič cez časovanie |
| Escapovanie výstupu a whitelist URL sú na jednom mieste | Jeden escapovací helper a jeden whitelist protokolov pre každý odkaz a atribút z externých dát — neimplementuje sa znova v každej šablóne |
| Odchádzajúce webhooky sú podpísané a chránené proti SSRF | HMAC SHA-256 podpis pri každom doručení, privátne a link-local ciele sú zablokované |
| Rate limit na každej route | 600 požiadaviek za minútu na API kľúč, pri neautentifikovanej prevádzke na IP; výnimku majú len liveness a readiness sondy |
Zaobchádzanie s osobnými údajmi je užšie než opatrenia vyššie a je zdokumentované samostatne: fyzické osoby sa nevydávajú, nie sú len skryté v rozhraní, dátumy narodenia sa u dospelých redukujú na rok a u maloletých potláčajú, a rovnaké pravidlá platia cez API aj MCP server ako na webe. Ochrana osobných údajov →
Zálohy
| Čo | Frekvencia | Kde | Retencia |
|---|---|---|---|
| Offsite, šifrované (nenahraditeľná množina) | Denne 03:30 UTC | Cloudflare R2, šifrované na strane klienta | 14 denných · 8 týždenných · 12 mesačných · 7 ročných |
| API kľúče | Denne 02:30 UTC | Dump na hostiteľovi | 30 dní + 12 mesiacov |
| Aplikačné tabuľky (PostgreSQL) | Týždenne, nedeľa 03:00 UTC | Dump na hostiteľovi | 3 týždenné + 1 mesačný (limitované diskom) |
| Súbor s tajomstvami (.env) | Týždenne, nedeľa 04:00 UTC | AES-256-CBC + PBKDF2, chránené heslom | Job odmietne bežať nešifrovane |
Offsite job pokrýva nenahraditeľnú množinu — schému s osobnými údajmi a aplikačné tabuľky s kľúčmi, odbermi, stavom monitoringu a sankčnými zhodami — a šifruje ju ešte na tomto serveri, takže poskytovateľ úložiska drží šifrovaný text, ktorý nevie prečítať. Objemný korpus registrov je zámerne vynechaný: dá sa znovu odvodiť z verejných zdrojov, z ktorých pochádza, takže jeho cesta obnovy je opätovné načítanie, nie obnova zo zálohy.
Obnova — a ako vieme, že funguje
RPO (bod obnovy): najviac 24 hodín pre nenahraditeľnú množinu, ohraničené denným behom o 03:30 UTC. Obsah registrov obnovený opätovným načítaním sa vráti na čerstvosť svojho zdroja, ktorá je zverejnená per zdroj na status stránke.
RTO (čas obnovy): menej než 4 hodiny je náš zdokumentovaný cieľ — a je to cieľ, nie nameraná hodnota. Obnova je skriptovaná od začiatku do konca a cesta obnovy z offsite kópie sa preveruje týždenne, ale úplná časovaná obnova celej služby zatiaľ neprebehla, takže číslo nebudeme prezentovať, akoby prebehla. Ak zmluva potrebuje záväzné RTO, je to téma na rozhovor pred podpisom, nie po ňom.
Čo nemáme
| Medzera | Čo to pre vás znamená |
|---|---|
| Žiadna certifikácia ISO 27001 ani SOC 2 | Nemáme auditovanú certifikáciu. Opatrenia sú zdokumentované a overiteľné, nie potvrdené treťou stranou. Ak vaše obstarávanie vyžaduje atestáciu, povedzte nám to skôr, než začnete hodnotenie. |
| Produkčný zväzok nie je šifrovaný v pokoji | Zálohy, ktoré opúšťajú server, sú šifrované na strane klienta a súbor s tajomstvami je šifrovaný osobitne, ale samotný bežiaci zväzok stojí na fyzickej a logickej izolácii poskytovateľa, nie na šifrovaní celého disku. Drvivá väčšina korpusu sú dáta z verejných registrov; schéma s osobnými údajmi a úložisko prihlasovacích údajov sú presne to, čo pokrýva šifrovaná offsite kópia. |
| Jeden región, jeden hostiteľ | Jeden server v jednom dátovom centre. Neexistuje hot standby, takže výpadok toho hostiteľa je výpadkom služby. Obnova beží z offsite zálohy — pozri ciele obnovy vyššie. |
| Žiadny bug-bounty program | Za hlásenia neplatíme. Čítame však každé a radi vás uvedieme, ak o to stojíte. |
Hlásenie zraniteľnosti
Píšte na [email protected]. Tá istá adresa je zverejnená v /.well-known/security.txt podľa RFC 9116, po slovensky alebo po anglicky.
Priložte prosím dosť detailov na reprodukciu problému a dajte nám rozumný čas na opravu pred zverejnením. Nikoho, kto hlási v dobrej viere a neexfiltruje dáta, nedegraduje službu ani nepristupuje k údajom iných ľudí, nebudeme stíhať. Nespúšťajte prosím automatické skenery proti produkcii — rate limiter vás jednoducho zablokuje a nálezy budú šum.
Čokoľvek, čo nie je zraniteľnosť — zmluvy, otázky k dátam, žiadosť dotknutej osoby — patrí na [email protected] alebo cez stránky nižšie.