Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System rejestracji i logowania - pytania
Forum PHP.pl > Forum > PHP
tukan
Witam Wszystkich! laugh.gif
To mój pierwszy post na tym forum, więc proszę o wyrozumiałość. Piszę sobie system logowania i rejestracji i mam parę pytań:
REJESTRACJA:
1. Wyświetlam formularz rejestracji, pobieram informacje i wysyłam na e-maila linka aktywacyjnego, Udało mi się to zrobić, tylko pytanie:
W jaki sposób generować maksymalnie bezpiecznego linka aktywacyjnego?
Planuję takiego: www.strona.pl/index.php?id_usera=X&active=? ( i tutaj mam niby jakiś pomysł, ale chcę na pewno bezpiecznie) <- dobry pomysł
2. Teraz sam system aktywacji: Po wejściu na index.php odbieram ( jeśli istnieją) zmienne "aktywacyjne" następnie sprawdzam czy jest w bazie id_użytkownika z linka, jeśli tak to sprawdzam czy kod zgadza sie z kodem poprawnym:
i tutaj: wydaje mi się, że nie ma sensu trzymać linka aktywacyjnego w bazie danych, a tworzyć go "dynamicznie" podczas sprawdzania, co o tym sądzicie?
3. Jeśli aktywacja się powiedzie to zmieniam pole aktywacji z 0 ( domyślnie nieaktywowany) na 1 ( aktywowany), co o tym sądzicie, można lepiej czy to już jest optymalnie?
LOGOWANIE:
1. W bazie mam zapisane hasło w postaci szyfrowanej md5() i przy podawaniu hasła przez usera szyfruję je, a następnie porównuję z tym w bazie, tak jest chyba optymalnie, co o tym sądzicie?
I tuaj również pytanie: Jak solić i hashować hasło tak, aby było maksymalnie bezpieczne.
pozdrawiam
tukan
danielntk
Hej smile.gif

Ja polecam aby hasło zabezpieczyć tak:


  1. $haslo = sha1(md5($_POST['haslo']));


Zawsze bezpieczniej/
aachi
REJESTRACJA
Bezpieczny kod aktywacyjny to chyba Ci chodzi o taki który trudno zgadnąć? Możesz go wygenerować np. md5(time()."napis"); No, ale w tym wypadku musisz zapamiętać go w bazie.
Jeśli nie chcesz zapamiętywać kodu w bazie to możesz, go generować z jakiejś stałej np md5($id_usera."napis"), ale osoba która będzie widziała kod (edit: znaczy kod skryptu) bez problemu wygeneruje link aktywacyjny dla dowolnego innego konta.
Jeśli 32 znaki to za mało to możesz użyć sha1. Wysyłanie $id_usera (lub loginu) to niezły pomysł, bo zabezpieczasz się przed kolizjami kodu aktywacyjnego.

Ad3
No chyba każdy robi właśnie coś w tym guście.

Jeśli chodzi o trzymanie zaszyfrowanego hasła w bazie, to robi się to po to by ktoś kto uzyskał dostęp do bazy nie mógł nadal odgadnąć hasła. Ponieważ md5 nie jest za mocnym hashowaniem (tęczowe tablice) jak chcesz mieć na prawdę dobrze zaszyfrowane to możesz hashować przy użyciu dłuższych metod np.:
$zakodowane_hasło=hash('whirlpool',$haslo);

Sól dodaje się by (jeśli ktoś zdobył hash, ale nie wie jak jest robiony), nie mógł użyć tych tęczowych tablic... bo najpierw musiałby zgadnąć który fragment hasha jest solą.
Np. dodajemy sól gdyby ktoś chciał użyć nieistniejących jeszcze tęczowych tablic dla whirpoola:
$zakodowane_haslo=substr_replace($zakodowane_haslo,substr(md5($login.'a'),5,6),20,6);

Ale myślę, że na stronie domowej wystarczy proste sha1($haslo.'napis');
tukan
Dzięki za pomoc :-)
Wciąż czekam na wypowiedzi kolejnych osób, im więcej osób się wypowie tym lepiej wink.gif
greycoffey
Cytat(danielntk @ 19.06.2011, 18:11:47 ) *
Hej smile.gif

Ja polecam aby hasło zabezpieczyć tak:


  1. $haslo = sha1(md5($_POST['haslo']));


Zawsze bezpieczniej/



Kolejny kryptolog.
http://www.zyxist.com/pokaz.php/wielokrotne_haszowanie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.