⊗ppPmAuRHS 424 of 447 menu

Dodawanie soli do rejestracji

A więc, już wiesz, że hashowanie przez md5 - jest procesem nieodwracalnym i haker, który uzyskał dostęp do hasha, nie będzie mógł uzyskać z tego hasha hasła.

W rzeczywistości to stwierdzenie nie jest całkowicie poprawne - obecnie źli hakerzy stworzyli biblioteki hashów popularnych i mniej popularnych haseł i każdy głupek może odgadnąć hasło, po prostu wyszukując jego hash.

Mowa o wystarczająco prostych, popularnych hasłach.

Wyszukaj na przykład hash 827ccb0eea8a706c4c34a16891f84e7b i od razu w wyszukiwarce Google zobaczysz, że to hasło '12345'.

Hashów wystarczająco skomplikowanych haseł w ten sposób nie odgadniesz (spróbuj).

Możesz spytać, w czym w takim razie problem - niech wszyscy będziemy rejestrować się ze skomplikowanymi hasłami. Jest jednak problem - większość użytkowników nie myśli o bezpieczeństwie swoich danych i może wprowadzać wystarczająco proste hasła.

Możemy przy rejestracji zmuszać do wymyślania dłuższych haseł, ograniczając, na przykład, minimalną liczbę znaków do 6 lub 8, jednakże i tak będą pojawiać się hasła typu '123456' lub '12345678'.

Można, oczywiście, wymyślić bardziej inteligentny algorytm sprawdzania złożoności hasła, ale jest inne rozwiązanie.

Istota tego rozwiązania jest taka: hasła trzeba posolić. Sól - to specjalny losowy ciąg znaków, który będzie dodawany do hasła przy rejestracji i hash będzie obliczany nie od prostego hasła, a od ciągu sól+hasło, to znaczy od solonego hasła.

To znaczy przy rejestracji będziesz robić coś takiego:

<?php $salt = '1sJg3hfdf'; // sól - skomplikowany losowy ciąg znaków $password = md5($salt . $_POST['password']); // przekształcamy hasło w solony hash ?>

Przy czym sól będzie inna dla każdego użytkownika, trzeba ją będzie generować w sposób losowy w momencie rejestracji.

Oto gotowa funkcja, która to zrobi:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // długość soli for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // znak z ASCII-table } return $salt; } ?>

Za pomocą tej funkcji można przepisać nasz kod w ten sposób:

<?php $salt = generateSalt(); // sól $password = md5($salt . $_POST['password']); // solone hasło ?>

Jeszcze raz powtórzę, że to były zmiany przy rejestracji - w bazie danych zapisujemy nie po prostu hash hasła, a hash solonego hasła.

To jeszcze nie wszystko: w tabeli z użytkownikami oprócz pól login i password trzeba zrobić jeszcze pole salt, w którym będziemy przechowywać sól każdego użytkownika.

Zaimplementuj opisaną powyżej rejestrację z solonym hasłem.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć