Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] skrypt logowania z szyfrowaniem hasla
adam83
post 17.11.2009, 19:02:44
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 2.11.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Kszyhuu
post 17.11.2009, 19:22:03
Post #2





Grupa: Zarejestrowani
Postów: 157
Pomógł: 32
Dołączył: 24.08.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Kszyhuu 17.11.2009, 19:26:18
Go to the top of the page
+Quote Post
Fifi209
post 17.11.2009, 19:29:53
Post #3





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Przecież, hasło również można porównać po stronie mysql... Po co pobierać dodatkowe dane i obciążać php?


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
adam83
post 17.11.2009, 20:41:15
Post #4





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 2.11.2009

Ostrzeżenie: (0%)
-----


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!

Ten post edytował adam83 17.11.2009, 20:45:03
Go to the top of the page
+Quote Post
Fifi209
post 17.11.2009, 20:54:15
Post #5





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Analogicznie jak porównujesz nazwę użyszkodnika.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
MateuszS
post 17.11.2009, 21:43:05
Post #6





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


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)


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
adam83
post 17.11.2009, 22:43:31
Post #7





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 2.11.2009

Ostrzeżenie: (0%)
-----


a kontrolowanie adresu IP sesji i aktualnego usera? stosuje się to?
Go to the top of the page
+Quote Post
piotr94
post 18.11.2009, 10:24:24
Post #8





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

Ostrzeżenie: (0%)
-----


czasami się stosuje sprawdzanie adresu IP użytkownika, ale zwykle wystarcza już sesja


--------------------
http://www.piotr94.net21.pl/ - wykonanie stron i serwisów internetowych
Jeśli moje wypowiedzi były dla Ciebie pomocne, kliknij "Pomógł" i odwdzięcz się ;)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:06