Nie bez SSL
Nie jest to bezpieczne, jeśli hasło jest wysyłane przez sieć zwykłym tekstem. Hashowanie hasła po stronie serwera również nie jest bezpieczne, jeśli hasło jest wysyłane przez sieć zwykłym tekstem.
Ponieważ <input type="password"/>
znacznik HTML wysyła zawartość w postaci zwykłego tekstu, będzie to problem bez względu na sposób przechowywania hasła na serwerze, chyba że witryna internetowa używa protokołu SSL do przesłania hasła.
(Uwierzytelnianie HTTP, które pojawia się w oknie dialogowym z prośbą o podanie hasła, może, ale nie musi być zwykłym tekstem, w zależności od wspólnych mechanizmów uwierzytelniania serwera i przeglądarki. Może to być sposób na uniknięcie tego bez użycia SSL.)
Nie, jeśli administratorzy witryny są podejrzani
Zakładając, że używasz HTTPS do tworzenia stron internetowych, może to być bezpieczne, jeśli zaufasz administratorom witryny (którzy potrafią czytać hasła w postaci zwykłego tekstu) i innym osobom, które mają dostęp do komputera, aby zachowywać się poprawnie. Teraz może być oczywiste, że mogą zrobić wszystko, co chcą z twoją witryną (ponieważ administrują nią), ale jeśli potrafią odczytać hasło, mogą również być w stanie użyć skradzionej pary login / hasło na stronach innych osób.
Sposobem, który utrzymuje bezpieczny od haseł administratora
Jeden bezpieczny sposób przechowywania haseł i sprawdzić to w następujący sposób:
def change_password user, new_password
salt = random(65536).to_s(16) #will be 4 characters long
password_hash = salt + hash(salt + new_password)
store(user,password_hash)
end
def does_password_match? user, entered_password
correct_password_hash = retrieve(user)
salt = correct_password_hash[0...4]
entered_password_hash = salt + hash(salt + entered_password)
return correct_password_hash == entered_password_hash
end
Dla funkcji skrótu, spróbuj użyć czegoś silny, a coś, co nie ma dobrych tęczowe tablice w naturze jeszcze. Można zmienić długość soli razie potrzeby stoły robocze wokół tęczy.
W zależności od środowiska, w którym się znajdujesz, zmienności opóźnień w sieci oraz tego, czy nazwy użytkowników mają być znane publicznie, możesz chcieć obliczyć inną ścieżkę kodu, hash('0000'+entered_password)
jeśli użytkownik nie istnieje, aby uniemożliwić atakującym określania nazwy użytkowników, które są ważne w oparciu o czas potrzebny określić, że hasło jest nieprawidłowe.