Przechowywanie haseł użytkowników określa w jaki sposób dbamy o ich bezpieczeństwo. Powszechna praktyka to używanie funkcji skrótu, które tworzą skrót hasła wprowadzonego przez użytkownika, który w teorii jest nieodwracalny(nie można ze skrótu uzyskać hasła). W praktyce jednak istnieją tak zwane tęczowe tablice(ang. rainbow tables), które w dość szybki sposób z wprowadzonego hasha(rezultat funkcji skrótu) odszukują w bazie hasło. Nasuwa się więc pytanie jak w poprawny sposób zabezpieczyć hasła użytkowników.

Czego nie należy robić by bezpiecznie przechowywać hasła w PHP

  • Nigdy nie określaj limitu znaków w haśle
  • Nie określaj znaków, które pojawiają się w haśle. Jeśli ktoś chce mieć $%#$ w haśle pozwól mu na to
  • Nigdy nie zapisuj haseł, które nie są zaszyfrowane/zahashowane
  • Nie zapisuj haseł używając funkcji MD5() oraz SHA1() gdyż w dzisiejszym świecie nie są bezpieczne z uwagi na moc obliczeniową komputerów, klastrów itp.
  • Nie wysyłaj haseł do użytkowników e-mailem(np podczas rejestracji)
  • W przypadku wykrycia ataku wymuś zmianę hasła dla wszystkich użytkowników przed ponownym zalogowaniem się do systemu

Co należy zrobić by bezpiecznie przechowywać hasła w PHP

  • Używaj scrypt jeśli jest to możliwe lub mcrypt jeśli nie
  • Jeżeli nie możesz użyć tych dwóch blibliotek to użyj SHA2 wraz z PBKDF2
  • Wymuś na użytkowniku wprowadzenie conajmniej 8 znakowego hasła skłądającego się z małych i wielkich liter, cyfr oraz znaków specjalnych
  • Sól hasła(ang. salt) – solenie haseł polega na utworzeniu losowego ciągu znaków, zapisaniu go w bazie i dodaniu do funkcji skrótu. Przykład funkcja_skrotu($haslo + $sol). Sprawdzenie polega na pobraniu soli z bazy i utworzenie kolejnego skrótu w ten sam sposób co powyżej

Przydatne odnośniki: