Popis zabezpečení

Obecně při návrhu a implementaci řešení dbáme na co největší důvěrnost, integritu a dostupnost dat.

Důvěrnost

Přístup k datům řešíme na úrovni rozlišení přístupových práv, autentizace uživatelů a autorizace k jednotlivým zdrojům. Pro přístup na naše data přes API používáme autentizaci pomocí JWT, který je digitálně podepsaným tokenem a na základě asymetrické kryptografie můžeme jednoznačně určit jeho pravost a správnost a úspěšně identifikovat uživatele. Každý uživatel má přiřazené role a těmto rolím jsou explicitně přidělovány práva ke zdrojům (jednotlivé API endpointy, jednotlivá data). Nově implementovaný zdroj je ve výchozím stavu nedostupný, dokud není povolený.

Přístupová práva řešíme na samostatné vrstvě, kde jsou uživatelům přidělovány práva do “vnitřních” systémů na API. Práva jsou přidělovány na úrovni endpointů, druhu dat, nebo i jednotlivých parametrů či hodnot parametrů.

Pro přístup k aplikacím pro správu a klientským aplikacím řešíme autentizaci přes uživatelské jméno (ověřený email) a heslo. Hesla ukládáme v zakryptované podobě pomocí bcrypt. Uživatelská a přístupová data (emaily, hesla) máme v oddělené databázi od hlavní provozní “datové” databáze. Aplikace pro správu systému jsou dostupné pouze na vnitřní síti.

Neukládáme (zatím) žádné osobní údaje.

Integrita

Veškerá komunikace probíhá přes HTTPS. Používáme HSTS politiku.

Integritu dat zajišťujeme na úrovni pravidelné validace a alertingu. Všechna data, která přijímáme/stahujeme jsou validována oproti centrálnímu schématu dat před posunutím v systému/uložením do databáze. Máme jasnou databázovou strukturu pro naše všechny databáze. Při přechodu na vyšší/nižší verzi provádíme up/down migrace databází.

Dostupnost

Dostupnost dat a systému je zajištěna na úrovni SLA poskytovatelem služby (příklad databáze “as a service”), nebo pravidelným zálohováním a možností obnovení dat. Konkrétní popis zálohování, provozu a řešení katastrofických scénářů v samostatné dokumentaci.

Ochranu proti DDoS útokům řešíme na úrovni infrastruktury. Ochranu proti běžnému přetížení systému řešíme škálováním a také nastavením rate-limitu pro dotazy pro všechny uživatele. Každý uživatel má nastavený maximální možný počet dotazů na systém pro dané časové okno, po překročení je mu přístup dočasně omezen.

Provádíme pravidelnou kontrolu dostupnosti (a validity) dat, které přebíráme ze systémů třetích stran. Pokud nějaká data přestanou přicházet, přicházejí ve špatném formátu, nejsou dostupná na rozhraní kterého se doptáváme nebo jsou dostupná ve špatném formátu, máme nastavený alerting a problém ihned řešíme. Ukládáme statistiky přístupů na API jak od nás externích, tak uživatelů na naše API.

Obecně jsou dále

  • všechny vstupy sanitizované pro zamezení SQL-injection
  • veřejně dostupné formuláře zabezpečeny re-captchou proti brute-force útokům
  • citlivé informace uloženy pouze v zabezpečeném prostředí (např. nejsou součástí git repozitářů)
  • výstupní a vstupní API oddělené aplikace - veřejně dostupné API je samostatná aplikace, která ani neumí data změnit a povoluje pouze “bezpečné” metody GET, HEAD, apod.