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
- Vyžadují dodržování zásad a bezpečné ukládání
- 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.
- 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
- Zablokujte například 1000 nebo 10000 nejčastějších hesel
- Je alespoň 8 znaků dlouhé, pokud se používá vícefaktorové ověření a další kontroly
Implementujte bezpečný mechanismus pro obnovení hesla
- Ukládejte uživatelské credentials bezpečně, abyste zajistili silnou autentizaci
- 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í
- Lze je získat online
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
- Zajistěte, aby bylo session ID dlouhé, jedinečné a náhodné
- Regenerujte nebo rotujte session při každém přihlášení
- Implementujte časový limit nečinnosti a maximální dobu trvání session
- 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)