Přeskočit na hlavní obsah

Bezpečnost

MujVykaz implementuje několik vrstev zabezpečení pro ochranu vašich dat.

Požadavky na heslo

Každé heslo musí splňovat:

PožadavekMinimum
Délka8 znaků
Velké písmenoAlespoň 1
ČísliceAlespoň 1
Speciální znakAlespoň 1 (!@#$%^&* apod.)

Hesla jsou hashována moderním algoritmem s vysokými výpočetními náklady (memory-hard function) a nikdy se neukládají v čitelné podobě.

Ověření e-mailu

Po registraci e-mailem musíte potvrdit svou adresu kliknutím na ověřovací odkaz. Bez ověření:

  • Nemůžete přistupovat k většině funkcí
  • Systém zobrazuje upozornění s možností opětovného odeslání

Správa relací (sessions)

ParametrHodnota
Platnost relace7 dní
Automatické odhlášeníPo 7 dnech neaktivity
Souběžné relacePovoleny (více zařízení)

Aktivní relace můžete zkontrolovat v Nastavení → Bezpečnost. Pokud vidíte neznámé relace, můžete je ukončit.

Rate limiting

Všechny endpointy jsou chráněny rate limitingem proti brute-force útokům a zneužití:

  • Přihlášení, registrace, reset hesla — přísné limity proti automatizovaným útokům
  • REST API — 120 požadavků za minutu na API klíč (pro legitimní integrace s dostatečnou rezervou)
  • Pozvánky do organizace — 20 pozvánek za hodinu na uživatele/organizaci; 5 pozvánek za hodinu na cílovou e-mailovou adresu (ochrana před enumerací a spamem)
  • Ostatní endpointy — limity nastavené podle typu operace

Po překročení limitu se zobrazí chyba 429 Too Many Requests s hlavičkou Retry-After udávající čas do příštího pokusu.

Ochrana proti útoku na heslo (credential stuffing)

Aplikace má vícevrstvou obranu proti automatizovaným pokusům o uhodnutí hesla:

VrstvaLimitCo dělá
Per IP adresa10 pokusů / minutuBlokuje obvyklý brute-force z jednoho zdroje
Per e-mail5 pokusů / 15 minutZachytí distribuovaný útok přes mnoho IP adres
Zámek účtu5 neúspěšných pokusů → 15 minutÚčet je dočasně uzamčen — žádné další pokusy nejsou přijaty
Dvoufázové ověření5 pokusů / 15 minutLimit pro zadání kódu z autentizační aplikace

Co když je váš účet zablokován?

Pokud zadáte špatné heslo 5× během 15 minut, účet se automaticky uzamkne na 15 minut. Při dalším pokusu uvidíte chybu:

Účet je dočasně uzamčen z bezpečnostních důvodů. Odemkne se v HH:MM. Pokud si nepamatujete heslo, můžete si ho resetovat.

Co dělat:

  • Resetujte si heslo — kliknutím na "Zapomenuté heslo" na přihlašovací stránce. Po nastavení nového hesla se zámek okamžitě uvolní.
  • Počkejte 15 minut — zámek se automaticky uvolní.
  • Zkontrolujte e-mail — pokud došlo k zámku poprvé za 24 hodin, dostanete bezpečnostní upozornění s detaily a doporučením změnit heslo, pokud jste to nebyli vy.
info

Pokud používáte přihlášení přes Google účet, tento zámek se na vás nevztahuje — Google má vlastní bezpečnostní mechanismy.

warning

Sdílíte počítač? Pokud váš kolega zkusí přihlášení s vaším e-mailem a špatným heslem, započítá se to do vašeho limitu. V takovém případě dostanete e-mail s upozorněním — doporučujeme změnit heslo a zvážit aktivaci dvoufázového ověření.

Dvoufázové ověření (2FA)

Pro zvýšení bezpečnosti doporučujeme aktivovat dvoufázové ověření (2FA). Po aktivaci budete při přihlášení zadávat kód z autentizační aplikace.

Doporučení

tip
  • Aktivujte 2FA pro všechny členy s rolí Admin a Owner.
  • Používejte unikátní hesla — nerecyklujte hesla z jiných služeb.
  • Pravidelně kontrolujte aktivní relace.
  • U API klíčů nastavte minimální potřebná oprávnění (klíče dědí roli uživatele).

Šifrování

  • Veškerá komunikace probíhá přes HTTPS/TLS.
  • API klíče jsou uloženy jako HMAC-SHA256 hash s pepperem — každý klíč je zabezpečen serverovým tajemstvím, takže kompromitace databáze nestačí k rekonstrukci klíčů.
  • Webhook secret klíče se porovnávají pomocí timing-safe comparison pro ochranu proti timing attacks.
  • Webhooky jsou chráněny proti SSRF útokům — cílová URL je validována před odesláním požadavku (blokují se privátní IP rozsahy, localhost a IPv6 link-local adresy).

Datová izolace mezi organizacemi

Pokud jste členem více organizací, aplikace přísně odděluje data jedné organizace od druhé:

  • Každý záznam (výkaz, projekt, klient, faktura, zpráva, nepřítomnost) patří vždy jedné konkrétní organizaci.
  • Přepnutí organizace v levém sidebaru vždy okamžitě izoluje pohled — uvidíte pouze data aktivní organizace.
  • API klíče jsou svázané s konkrétní organizací — klíč vytvořený v organizaci A nelze použít pro přístup k datům organizace B.
  • Chrome Extension pracuje s tou organizací, ve které byla aktivní, když jste extension připojili.
tip

Pokud přecházíte mezi organizacemi, doporučujeme si ověřit v horním levém rohu aplikace, ve které organizaci aktuálně pracujete. Rozdílné organizace mohou mít různé role, projekty i oprávnění.

Export osobních dat (GDPR Art. 20)

Každý uživatel si může kdykoliv stáhnout všechna svá osobní data v JSON formátu:

Nastavení → Osobní → Export dat → tlačítko Stáhnout moje data.

Export obsahuje:

  • Profilové údaje (jméno, e-mail, role)
  • Všechny výkazy a jejich popisy (včetně původní doby, měny, částky, aktivity a metadat)
  • Interní zprávy
  • Notifikace
  • API klíče (bez plain-text hodnot — pouze metadata)
  • Nepřítomnosti
  • Team tagy (přiřazené štítky)
  • Audit log vašich vlastních akcí (posledních 365 dní)
info

Multi-org tagging: pokud jste členem více organizací, každý záznam v exportu obsahuje pole orgId a orgName, abyste mohli identifikovat, z které organizace data pocházejí. Toto je v souladu s GDPR Art. 20 (přenositelnost údajů) — máte právo vědět, kdo je správcem jednotlivých dat.