![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 158 Pomógł: 6 Dołączył: 7.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Postanowiłem powiększyć bezpieczeństwo swojej bazy z hasłami userów. Wybór padł na użycie soli i haseł zapisanych w MD5. Pierwszy problem to fakt że aktualnie w bazie mam już 300 użytkowników wraz z hasłami w MD5. Czy jedyny sposobem jest prośba użytkowników o wygenerowanie nowego hasła? Druga sprawa to nie potrafię za bardzo zrozumieć jak rozkodować to co wpisze użytkownik jako hasło logowania. Jak dobrze rozumiem przy tworzeniu konta uzytkownika hasło wybrane przez niego poddaje działaniu Za zmienną $salt podstawiam jakiś ciąg wygenerowanych znaków. (Czy muszą mieć one z góry zadeklarowana długość?) Do bazy lecą dwie zmienne $password w formie hasha i $salt (w formie zwykłego tekstu?) I teraz nie wiem za bardzo jak rozgryźć to od strony logowania. Do tej pory po prostu to co wpisał user porównywałem z md5($password) jesli było ok to logowanie sie powiodło, ale teraz zmienna $password będzie połączeniem jego prawdziwego hasła i soli. jak mogę rozbić to co użytkownik wpisze w polu hasła na salt i hash? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Tak to jedyny sposób, ponieważ md5 nie jest algorytmem kodującym tylko mieszającym, więc nie da się wrócić do pierwotnej postaci, jedyna opcja to użycie tablic tęczowych, ale w tym przypadku to nie opłacalne, po prostu napisz do użytkowników, że w związku z usprawnieniem bezpieczeństwa wymagane jest wygenerowanie nowego hasła i tyle. Nie, sól jest dowolna, chodzi głównie o to, żeby nie dało się rozpoznać haseł przy pomocy tablic tęczowych To zależy czy będziesz używał tej samej soli, czy będziesz ją generować dla każdego użytkownika, jeżeli to drugie to tak, zapisujesz ją w bazie, jeżeli to pierwsze to wystarczy, że zapiszesz ją w pliku php
Ale co Ty chcesz rozbijać, jak wcześniej wstawiałeś do zapytania md5($pass) to teraz wstawiasz md5($pass.$salt); i tyle. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Musisz prosić o ponowne wygenerowanie hasła
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 158 Pomógł: 6 Dołączył: 7.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Musisz prosić o ponowne wygenerowanie hasła Niekoniecznie. Pośrednio da się wprowadzić saltowanie w sposób niewidoczny dla użytkowników. Co prawda dopóki użytkownik się nie zaloguje do serwisu dopóty w bazie dalej będziemy dalej stare hasło bez salta, jednak taki stan przejściowy może trwać parę tygodni. W tym czasie podczas logowania do serwisu użytkownikom zostanie wygenerowany nowy hash już z saltem. Po stanie przejściowym, na całej reszcie, która się nie zalogowała w tym czasie, wymuszamy wprowadzenie nowego hasła.Co prawda, dla 300 użytkowników nie wiem czy jest sens, ale gdybyśmy mieli ich paredziesiąt/pareset tysięcy taki manewr jest warty zachodu ![]() Ten post edytował redeemer 17.07.2012, 21:07:07 -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 158 Pomógł: 6 Dołączył: 7.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ale jeżeli pole salt w bazie danych będzie puste to przy operacji md5($pass.$salt) nie zajdzie żadna zmiana i będziemy to równe operacji md5($pass) ?
Bo jeśli tak to po prostu przy logowaniu będe sprawdzał czy pole salt jest puste, jeśli tak to po zalogowaniu na starym haśle automatycznie zostanie dopisany salt do bazy danych i wygenerowany nowy hash. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Zgadza się, to chyba najlepsze rozwiązanie.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 16.08.2025 - 20:37 |