2015-07-25 15 views
5

Zastanawiam się, jak korzystać z Hash::needsRehash() jak ja stara się zobaczyć przy użyciu dokumentacji dokładnie co to za.Laravel - Jak korzystać z Hash :: needsRehash()?

if (Hash::needsRehash($hashed)) { 
    $hashed = Hash::make('plain-text'); 
} 

Co dokładnie powoduje Hash::needsRehash() wrócić prawdziwe lub fałszywe, to zwraca wartość true, jeśli hasło jest zakodowane w innym hash (takich jak MD5, SHA1 itp)?

W przypadku, gdy baza danych zawiera wiele skrótów w innym algorytmie, a Hash::needsRehash() zwraca wartość true, w jaki sposób można ponownie utworzyć hasło użytkownika, aby było aktualne? Nie można polegać na haśle "login", ponieważ najpierw trzeba je porównać, aby potwierdzić, prawda?

Myślę, że mogę przesadzić, ale jestem teraz zdezorientowany. Na szczęście moje hasła użytkowników używają password_hash() tak więc nie powinno być problemu.

Odpowiedz

4

Hash::needsReHash() po prostu dzwoni do php wbudowanej funkcji password_needs_rehash. Pomocne komentarz w docs jest:

// Check if a newer hashing algorithm is available 
// or the cost has changed 
if (password_needs_rehash($hash, PASSWORD_DEFAULT, $options)) { 

Więc Hash::needsReHash() zwróci false wtedy i tylko wtedy mieszania algorytm został zmieniony (ponieważ nie przekazujemy żadnych opcji, takich jak koszt).

Informacje na temat tego, jak i kiedy tego użyć, można ponownie wprowadzić hasło użytkownika tylko wtedy, gdy je masz - np. kiedy oni zalogowaniu się. Więc podczas procesu logowania, sprawdzając, czy ich algorytmu zapisanego hasła różni się od obecnego algorytmu, a jeśli tak, to zastąpić ich zapisany hash hasła na nowe.

+0

wystarczająco jasne. Pozostaje jeszcze moja troska. Jeśli twoje aktualne hasła użytkownika wymagają ponownego wprowadzenia hasła, w jaki sposób chcesz je ponownie włączyć, jeśli nie możesz zweryfikować prawdziwego hasła użytkownika? –

+0

Zaktualizowałem swoją odpowiedź; masz rację, nie możesz ponownie wprowadzić hasła, chyba że je masz. –

+1

Możesz zawsze sprawdzić hasło użytkownika; kiedy PHP przechowuje hasło, przechowuje również skrót, który był używany. Tak więc PHP jest w stanie sprawdzić poprawność haseł nawet po zmianach hash. –

2

Metoda zwraca wartość true, gdy PHP jest aktualizowane i nowy lepszy algorytm/default dodano lub wszelkie inne parametry zmienione. Pozwala to automatycznie korzystać z niego bez aktualizacji kodu.

Ta metoda jest używana, gdy użytkownik loguje się, ponieważ jest to jedyny dostęp do hasła tekstowego. Po potwierdzeniu, że jest poprawna, zgodnie ze starym hashem, bierzesz hasło w postaci zwykłego tekstu, ponownie je włączasz i umieszczasz z powrotem w bazie danych do wykorzystania w przyszłości.

Dla hipotetycznego przykładu, powiedzmy, że teraz algorytm to md5() 10k razy. W PHP7 był aktualizowany do sha512() 15 k razy. Jeśli hash jest w formacie $count|$algo|$hash, metoda może powiedzieć, kiedy hash jest przestarzała. Ponieważ stary algorytm nie został usunięty, nadal można sprawdzić poprawność hasła za pomocą starych parametrów przed ponownym uruchomieniem.

Uwaga: oczywiście używanie md5()/sha512() jest złym pomysłem. Używam ich jako przykładów.