Přeskočit na hlavní obsah

Implementace digitální identity

  • Digitální identita = jedinečná reprezentace uživatele v online světě
  • Autentizace = proces ověřování, zda je jednotlivec tím, za koho se vydává
  • Správa session = proces, při kterém server udržuje stav přihlášení uživatele tak, aby uživatel mohl používat systém bez nutnosti opětovného přihlášení

Úrovně autentizace

Hesla

  1. Umožněte uživatelům jejich resetování

Požadavky na heslo

  • Hesla musí splňovat minimálně následující požadavky
    • Je alespoň 8 znaků dlouhé, pokud se používá vícefaktorové ověření a další kontroly
      • Pokud ne, tak alespoň 10 znaků dlouhá
    • Podporuje všechny tisknutelné ASCII znaky a mezery
    • Pordporuje dlouhá hesla
    • Není složitě definováno
      • Typu: musí obsahovat jeden speciální znak, číslice, velké písmeno, atp.
      1. Použijte vícefaktorové ověření místo takto definovaného hesla
    • Zajišťuje, že zvolené heslo není běžně používané
      • Není na seznamu veřejně známých nebo uniklých hesel
      1. Zablokujte například 1000 nebo 10000 nejčastějších hesel

Implementujte bezpečný mechanismus pro obnovení hesla

  1. Ukládejte uživatelské credentials bezpečně, abyste zajistili silnou autentizaci
  2. Zaveďte kryptografické kontroly, aby v případě úniku credentials neměl útočník k těmto informacím okamžitý přístup

PHP příklad pro ukládání hesel

<?php
$cost = 15;
$password_hash = password_hash("secret_password", PASSWORD_DEFAULT,["cost" => $cost]);
?>
  • Příklad bezpečného hashování hesla pomocí password_hash()
  • Ve výchozím nastavení používá algoritmus bcrypt

2. Vícefaktorové ověření (MFA)

  • Pro aplikace s vyšším rizikem, které obsahují osobní údaje nebo jiné osobní informace
  • Zajišťuje, že uživatelé jsou těmi, za které se vydávají, a to tak, že se musí identifikovat pomocí kombinace
    • Něčeho, co znají (heslo, PIN)
    • Něčeho, co vlastní (token, telefon)
    • Něčeho, čím jsou (biometrika - otisk prstu)
  • Používání hesel jako jediného faktoru poskytuje slabé zabezpečení
  • MFA poskytují robustnější řešení, protože vyžadují, aby útočník získal více informací
  • Biometrické údaje nejsou považovány za přijatelný secret pro autentizaci, pokud jsou použity jako jediný faktor autentizace
    • Lze je získat online
      • Vyfotografováním někoho telefonem
      • Sejmutí otisků z něčeho, co osoba držela
    • Měly by se používat jako součást MFA s něčím, co osoba vlastní

3. Ověření na základě kryptografie

  • Vyžadován, pokud by únik dat vedl k osobním škodám, finančním ztrátám, poškození veřejného zájmu nebo občanskoprávním či trestněprávním přestupkům
  • Založeno na důkazu vlastnictví kryptografického klíče
  • Nejsilnější úroveň autentizace
  • Obvykle jde o hardwarový kryptografický modul

Správa session

  • Po přihlášení aplikace rozhodne, zda bude sledovat a udržovat přihlášený stav po omezenou dobu
  • To umožní uživateli pokračovat v používání, bez nutnosti opakovaného přihlášení

Generování session a expirace

  • Stav uživatele je sledován v session
  • Session je obvykle uložena na serveru
  • Session ID je předán klientovi, aby bylo možné identifikovat obsah a správnost dat
  • Klient udržuje pouze session ID, čímž se citlivá data nedostávají pryč ze serveru
  1. Zajistěte, aby bylo session ID dlouhé, jedinečné a náhodné
  2. Regenerujte nebo rotujte session při každém přihlášení
  3. Implementujte časový limit nečinnosti a maximální dobu trvání session
    1. Nechte uživatele znovu se přihlásit po uplynutí této doby

JWT (JSON Web Token)

  • Definuje způsob bezpečného přenosu informací mezi stranami ve formě JSON objektu
  • Informace lze ověřovat a důvěřovat jim, protože jsou digitálně podepsané
  • JWT token je vytvořen během autentizace a před jakýmkoli zpracováním je ověřen serverem
  • Je obvykle vytvořen a odeslán klientovi, aniž by byl uložen na serveru
  • Integrita je zachována pomocí digitálních podpisů - je možné ověřit, že je stále platný a že s ním nebylo manipulováno
  • Jde o bezstavový přístup (stateless)

Kam dál

Zranitelnosti

Cheat sheety

Checklisty