Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] skrypt logowania z szyfrowaniem hasla
Forum PHP.pl > Forum > Przedszkole
adam83
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
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:
  1. <form method="post" action="PLIK.php">
  2. Login : <input type="text" name="login" size="10" class="input">
  3. Pass:> <input type="password" name="pass" size="10" class="input">
  4. <input class="input" type="submit" name="submit" value="Zaloguj">

to zrób np:
  1. $login = mysql_escape_string($_POST['login']);
  2. $pass = mysql_escape_string(md5($_POST['pass']));
  3. $zapytanie = mysql_query("SELECT * FROM user WHERE login = '$login'");
  4. $dane = mysql_fetch_array($zapytanie);
  5. //I później tylko dajesz ifem
  6. if($login ==''.$dane['login'].'' && $pass ==''.$dane['pass'].''){
  7. //bla bla bla
  8. }

Czyli po prostu dajesz md5() od razu przy wyniku z formularza i wynik jest tam zamieniany na md5 hash. smile.gif
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
Przecież, hasło również można porównać po stronie mysql... Po co pobierać dodatkowe dane i obciążać php?
adam83
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
Analogicznie jak porównujesz nazwę użyszkodnika.
MateuszS
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
a kontrolowanie adresu IP sesji i aktualnego usera? stosuje się to?
piotr94
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.
Invision Power Board © 2001-2024 Invision Power Services, Inc.