ClientDeck handles sensitive business data of marketing agencies — OAuth tokens to client ad accounts, performance metrics, creatives. Security is therefore our highest priority. This page describes the concrete measures we have deployed in production and the standards they meet.
01Šifrování dat
Všechna data v tranzitu i v klidu jsou šifrována průmyslovými standardy. Klíče se rotují automaticky bez zásahu administrátora.
- HTTPS / TLS 1.3 na všech veřejných endpointech. HSTS hlavičky s 1 ročním max-age.
- AES-256-CBC pro citlivá data v databázi (OAuth tokeny, API klíče integrací, refresh tokeny).
- Envelope encryption (KEK + DEK) podle pattern AWS KMS / HashiCorp Vault. Master klíč v izolovaném env souboru s mode 600, data klíče v DB šifrované master klíčem.
- Automatická rotace klíčů: data klíče pro tokeny každých 90 dní, JWT klíče každých 30 dní. Master klíč rotujeme ručně 1× za 3-5 let podle NIST SP 800-57.
- Backward decryption — zachováváme i předchozí klíč pro plynulou rotaci bez výpadku služby. Stará data se na pozadí postupně přemigrují na aktuální klíč.
02Připojení přes OAuth 2.0 — hesla 3. stran neukládáme
Všechny integrace na reklamní platformy probíhají přes oficiální OAuth 2.0. Hesla k vašim Google, Meta, Microsoft, LinkedIn nebo Sklik účtům nikdy nevidíme.
- Přihlášení k externím platformám probíhá přímo na jejich přihlašovacích stránkách (Google consent screen, Meta Business Login atd.). Vaše heslo nikdy neprojde naší aplikací.
- Ukládáme pouze access tokeny a refresh tokeny vrácené z OAuth flow — vše AES-256 šifrované přes výše popsaný envelope mechanismus.
- Token refresh probíhá automaticky na pozadí, dokud máte připojení aktivní. Žádný zásah z vaší strany.
- Připojení můžete kdykoliv revokovat v sekci Nastavení → Integrace. Po revokaci tokeny okamžitě smažeme z databáze.
- Pro klientské integrace (Heureka, Shoptet apod.) nabízíme invite link flow — klient sám zadá své credentials přes branded
/connect/:tokenURL, agentura nikdy nevidí surový API klíč.
03Izolace dat — multi-tenant architektura
ClientDeck je vícenájemní platforma. Data jedné agentury jsou striktně oddělená od ostatních na aplikační úrovni i v databázi.
- Každý záznam má jednoznačného vlastníka —
client_id(firma/agentura) avirtual_client_id(projekt/zákazník agentury). - Autorizační middleware (
attachAuthz) na každém požadavku spočítá uživatelské granty (org_users.scope_type+scope_id+actions) a injectne doreq.authz. Dotazy do DB jsou pak filtrované přes IN-clause s povolenými scope_id. - Read-only sdílení dashboardů přes
share_tokenURL — externí uživatel uvidí jen konkrétnívirtual_client_id, žádné jiné. Volitelně chráněno heslem (bcrypt hash). - Kompletní audit log všech mutating operací (kdo, kdy, co, na jakém scope), retence 30 dní.
04Infrastruktura a poskytovatelé
Aplikace běží na evropské infrastruktuře. Žádný subdodavatel nezpracovává vaše data mimo EU bez vašeho explicitního souhlasu.
05Ukládání dat v EU
Veškerá data zákazníků zůstávají na území EU. Striktní GDPR compliance Art. 44 (transfers).
- Aplikační server: EU datacentrum (CZ nebo DE), 24/7 monitoring, redundantní napájení a chlazení.
- Databáze a zálohy: stejný region jako aplikace, žádné cross-border replikace.
- Cloudflare edge: globální CDN, ale citlivá data nikdy nejsou cachována (Cache-Control: private, no-store na API). Edge slouží jen pro statické asset a HTML.
- Pokud byste budoucně potřebovali zpracování mimo EU (nový subdodavatel), získáte předem informaci a explicitní souhlas.
06Ukládaná data a doba uchování
Sbíráme jen nezbytně nutné údaje. Po smazání účtu nebo revokaci máte právo na výmaz dle GDPR Art. 17.
- Profilová data uživatele (jméno, email, hash hesla, MFA tajemství): uchováme dokud máte aktivní účet. Po deaktivaci máme 30denní grace period (možnost obnovy), poté tvrdé smazání.
- OAuth tokeny a API klíče integrací: AES-256 šifrované. Smazány okamžitě při revokaci připojení.
- Reklamní data (kampaně, sety, výkonové metriky, kreativy): uchováváme max 3 roky pro historický reporting. Tu hranici si můžete snížit v nastavení.
- Audit log: 30 dní, poté automatické přepisování.
- Logy serveru / debug: 14 dní, anonymizované (bez OAuth tokenů a hesel).
- Soubory (kreativy, exporty, audity): smažete sami v UI nebo se smažou s mateřským projektem.
- Cascade delete: smazání účtu / organizace odstraní VŠE napříč souvisejícími tabulkami v jedné transakci.
07Přihlášení a autentizace
Bezpečnostní opatření na úrovni bank — kombinace bcrypt hashů, MFA, account lockoutu a per-IP rate-limitingu.
- Hesla: pouze bcrypt hash s cost 12 (~150 ms/hash, brute-force-resistant), nikdy plaintext v DB ani v logu.
- JWT v httpOnly cookie se sameSite=Strict a secure=true (v produkci). XSS scripty nemohou číst token, CSRF útoky neprojdou cross-site.
- Volitelný TOTP MFA (Google Authenticator, Authy, 1Password) + 10 backup kódů pro recovery.
- Account lockout: 5 fail loginů → účet zamčený 15 minut. Kontrola probíhá PŘED bcrypt.compare → ochrana proti timing-attack zjišťování existence emailu.
- Per-IP rate-limiting: 10 login pokusů / 15 minut pro stejnou kombinaci IP + email. Reset hesla 5 pokusů / 30 minut.
- Refresh tokeny v separátní tabulce, jednoznačné per session, revokovatelné jednotlivě i hromadně (logout všude).
- Sign-in přes Google OAuth jako alternativa hesla — méně přístupových bodů, doporučované pro týmové účty.
Standards and technologies we comply with
Compliance refers to implementation of technical controls, not a formal external audit. We update this page as our stack evolves.
Found a vulnerability?
We run a responsible disclosure program per RFC 9116. Report security issues directly to our security team — we respond within 72 hours, fix critical issues within 30 days.