Security and data protection

Last updated: June 12, 2026

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/:token URL, 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) a virtual_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 do req.authz. Dotazy do DB jsou pak filtrované přes IN-clause s povolenými scope_id.
  • Read-only sdílení dashboardů přes share_token URL — 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.

Cloudflare
CDN, WAF, DDoS protection, DNS
ISO 27001ISO 27018SOC 2 Type IIPCI DSS Level 1GDPR DPA
EU VPS (Plesk + Nginx)
Aplikační server, datacentrum EU (CZ / DE)
ISO 27001 (poskytovatel)GDPR-compliantTIER III
MySQL 8.x
Primární databáze, encrypted-at-rest disk
AES-256-CBC field-levelmysqldump backup šifrovaný
Redis
BullMQ fronty, session cache (TTL)
Auth password v envlocalhost-only bind
Stripe
Platby (Checkout + Webhook), karetní data
PCI DSS Level 1SOC 1SOC 2ISO 27001GDPR DPA
Nodemailer + SMTP
Transakční emaily (notifikace, reset hesla)
TLS 1.3 SMTPSPF + DKIM + DMARC

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

TLS 1.3AES-256OAuth 2.0bcrypt cost 12GDPR Art. 44NIST SP 800-57PCI DSS 3.6.4ISO 27001 A.10.1.2RFC 9116Cloudflare WAFHSTSSameSite=Strict

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.