Expirace hesel + pamatování a zamezení opakovaného zadání hesla rubrika: Návrh
Mám tady poptávku / požadavek, abych nějaký svůj informační systém doplnil o následující funkčnost:
- Každé heslo se může být platné max 180 dní. Pokud si jej uživatel v této lhůtě nezmění, tak přestane platit. Plus k tomu samozřejmě naprogramovat nějaké varování ve smyslu "změňte si heslo brzo expiruje", atd...
- Systém si bude pamatovat posledních 6 hesel a nedovolí je použít jako heslo nově zadávané.
Jak to naprogramovat (i v rámci bcrypt) je mi snad jasné (nemůžu porovnávat hashe, ale při zadaní nového pro kontrolu musím použít password_verify proti každém uloženému starému hashi)...
Ale chtěl bych se zeptat, jestli toto je z hlediska bezpečnosti vůbec podle dnešních trendů ještě správné? Jestli to spíš bezpečnost nesníží? Protože mně osobně to střídání hesel přijde spíš jako buzerace, která ve finále vede k tomu, že heslo skončí nalepené na papírku na okraji monitoru.
A to pamatování si hesel je podle mne úplně k ničemu, protože když mermomocí budu chtít stejné heslo, tak to prostě při změně změním 7x a pak si tam mohu dát zase to samé heslo.
Takže jestli to nemám zákazníkovi spíše zkusit rozmluvit...
Ale nejsem bezpečák a třeba se mýlím a je to naopak správná cesta.
Nemýlíš se. Omezovat platnost hesla a nutit uživatele měnit si je a používat pokaždé nové se dnes již považuje za přežitek a za antipattern. Důvodů je více, článků k tomu dost. Podobná praxe totiž mírně zvýší "technickou" bezpečnost hesla, ale výrazně sníží tu "lidskou" bezpečnost a vede uživatele k používání snadno zapamatovatelných a tedy i snadno uhodnutelných hesel, která si pak nějak nevhodně poznamenávají, anebo točí pořád to samé heslo, jen s malou variací, apod.
Předpokládám, že budeš chtít nějakou argumentační munici na klienta, tak třeba:
- americký NIST vydal už před pár lety nové doporučení: https://pages.nist.gov/800-63-3/sp800-63b.html#memsecret - sekce 5.1.1.2 - český výcuc toho nejpodstatnějšího https://www.root.cz/clanky/novy-standard-pro-prihlasovani-nenutte-uzivatele-menit-hesla/
- Microsoftí oficiální password policy recommendations: https://docs.microsoft.com/en-us/microsoft-365/admin/misc/password-policy-recommendations?view=o365-worldwide - "Password expiration requirements do more harm than good".
Chce-li klient zvýšit zabezpečení účtů uživatelů, doporuč mu spíš:
- používat dvoufaktorovou autentizaci (e-mailem, SMSkou nebo nějakým autentizátorem na one-time hesla, jak to udělat v PHP sepsal třeba Jakub Vrána na https://php.vrana.cz/jednorazove-heslo.php)
- vynucování komplexity hesel je složitější než jen "alespoň 8 znaků, velké a malé písmeno". S oblibou používám knihovnu ZXCVBN - https://github.com/dropbox/zxcvbn - kromě jiného vypočítá prolomitelnost hesla hrubou silou a vyhodnotí ji na stupnici od 0 do 4, tak dej minimum třeba 3.
- znemožnit brute-force hádání (nějaký throttlingem nebo zablokováním na minutu po X neúspěšných pokusech)
Pro zobrazení všech 3 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře