adam83
17.11.2009, 19:02:44
Witam,
Jestem PHP`owskim samoukiem, zaczynalem swoja przygode od prostego skryptu logowania usera, gdzie nazwa użytkowanika i haslo pobrane bylo z "includowanego" pliku tekstowego (config) w postaci $user, $pass..
Obecnie troszke pozmienialem ten skrypt, metodą prób i blędów dodalem kilka zabezpieczen, i wprowadzilem pobieranie hasla i nazwy uzytkowanika z bazy mysql.
Czesto spotykam się, z zagadnieniem szyfrowania hasla algorytmem MD5, jako że jest dzial ten jest przedszkolem, chcialbym zapytać Was, jak zastosowac tę funkcje szyfrujacą. W którym miejscu skryptu logowania ją umieścic aby mialo to wszystko sens?
Czy nowe haslo i nazwa usera wrzucana do bazy danych powinna byc w niej przechowywana w postaci jawnej czy jako zaszyfrowany ciąg znaków? jak pózniej to odszyfrować?
Z góry dziękuje za pomoc!
pozdrawiam
Kszyhuu
17.11.2009, 19:22:03
W bazie trzymasz hasło zhashowane (zakodowane) md5'ką. Później tylko przy zmiennej z formularza hashujesz wpisany tekst i porównujesz go z tym z bazy. Jeżeli wysyłasz to postem:
<form method="post" action="PLIK.php"> Login :
<input type="text" name="login" size="10" class="input"> Pass:>
<input type="password" name="pass" size="10" class="input"> <input class="input" type="submit" name="submit" value="Zaloguj">
to zrób np:
$zapytanie = mysql_query("SELECT * FROM user WHERE login = '$login'"); //I później tylko dajesz ifem
if($login ==''.$dane['login'].'' && $pass ==''.$dane['pass'].''){
//bla bla bla
}
Czyli po prostu dajesz md5() od razu przy wyniku z formularza i wynik jest tam zamieniany na md5 hash.
Mam nadzieję, że łapiesz o co kaman. ;] A odszyfrować się tego nie da. Możesz wtedy tylko porównywać, gdyż md5 jest funkcją jednostronną. Można go ewentualnie złamać przez brute force. Funkcji odwrotnej brak.
Fifi209
17.11.2009, 19:29:53
Przecież, hasło również można porównać po stronie mysql... Po co pobierać dodatkowe dane i obciążać php?
adam83
17.11.2009, 20:41:15
dzięki Kszyhuu, już lapie!
Fifi2009 móglbys napisać jak to zrobić po stronie mysqla?
Moglibyście mi jeszcze podpowiedzieć w jaki sposób w miarę maksymalnie podnieść bezpieczeństwo takiego skryptu, tzn. możliwie najbardziej utrudnić wlamanie się na stronę?
Nie wiem jak powinno to dobrze wyglądać, moj skrypt dziala tak że:
Po rozpoczęciu sesji na stronie z ograniczonym dostępem sprawdzane jest istnienie zmienniej $zalogowany (zmienna sesji)
- jeśli jej nie ma, odpalana jest strona z formularzem.
- jeśli istnieje i ma jakąs wartosc to znaczy ze ktoś jest zalogowany (w zaleznosci od wartosci tej zmiennej okreslam poziom dostępu)
Formularz logowania prosi o haslo i usera, po wpisaniu lączy sie z bazą i sprawdza czy istnieje, jeśli tak pobiera je wraz z innymi danymi odnośnie zalogowanego usera (mail, data urodzenia itp... )
(w tym punkcie dodam opisane wcześniej kodowanie)
Wylogowanie najpierw usuwa zmienne sesji a następnie zamyka istniejącą sesję i teatrzyk rozpoczyna się od nowa.
Jak w praktyczny sposób można poprawić bezpieczeństwo takiego prostego skryptu?
- gdzieś czytalem ze warto jest zapisać w zmiennej sesji adres IP komputera z którego dana sesja zostala zainicjowana i porównywać go ( tylko jak? na każdej podstronie.. ? ) z aktualnym adresem IP komputera przeglądajacego stronę?
ma to zapobiec przechwyceniu sesji,czy to dobry trop?
- hashowanie hasla dodam tak jak zostalo opisane wczesniej
- formularz posiada kilka warunków na "wygląd" hasla i nazwy użytkowanika, filtrowanie znaków htmlowskich itp.
można jeszcze coś dodać>?
Z góry jeszcze raz dzięki, sporo nauczylem się dzięki temu forum, wiem że sporo osób interesuje się logowaniem, wrzucając na stronę gotowe skrypty znalezione w necie nie wiele można czasem się nauczyć. Może ktoś inny także skorzysta, pozdrawiam!
Fifi209
17.11.2009, 20:54:15
Analogicznie jak porównujesz nazwę użyszkodnika.
MateuszS
17.11.2009, 21:43:05
Cytat
Po rozpoczęciu sesji na stronie z ograniczonym dostępem sprawdzane jest istnienie zmienniej $zalogowany (zmienna sesji)
- jeśli jej nie ma, odpalana jest strona z formularzem.
- jeśli istnieje i ma jakąs wartosc to znaczy ze ktoś jest zalogowany (w zaleznosci od wartosci tej zmiennej okreslam poziom dostępu)
Formularz logowania prosi o haslo i usera, po wpisaniu lączy sie z bazą i sprawdza czy istnieje, jeśli tak pobiera je wraz z innymi danymi odnośnie zalogowanego usera (mail, data urodzenia itp... )
(w tym punkcie dodam opisane wcześniej kodowanie)
Wylogowanie najpierw usuwa zmienne sesji a następnie zamyka istniejącą sesję i teatrzyk rozpoczyna się od nowa.
No i dobrze. Tylko pamiętaj aby filtrować zmienne od usera, co chyba robisz. No a co do wylogowania, myślę że wystarczy samo session_destroy(); (niszczy wszystkie sesje strony)
adam83
17.11.2009, 22:43:31
a kontrolowanie adresu IP sesji i aktualnego usera? stosuje się to?
piotr94
18.11.2009, 10:24:24
czasami się stosuje sprawdzanie adresu IP użytkownika, ale zwykle wystarcza już sesja
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.