Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Prosty mechanizm logowania z zastosowaniem sesji, Zobaczcie czy to ma sens
MGreg
post 26.03.2008, 16:16:20
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 18.09.2007

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


Witam,
Nie znam się dobrze na php, więc nie atakujcie mnie jak coś jest nie tak.
Zobaczcie czy ten skrypcik logowania z zastosowaniem sesji jest sensowny i co najważniejsze - bezpieczny.

Nie zwracajcie uwagi na to, że dane użytkownika są pobierane z tabeli bazy forum phpbb, to tylko przykład.
Najlepiej jakby ktoś zarzucił to sobie na localhosta i posprawdzał dokładnie.
Z góry dzięki.
  1. <?
  2. include('baza.php');
  3. pol_mysql();
  4.  
  5.  
  6. $user_ip = $_SERVER['REMOTE_ADDR'];
  7. $time = date('H:i');
  8.  
  9. $sesja_anim = md5($user_ip.$time); #sesja użytkownika anonimowego
  10. $sesja_uzytkownika = md5($user.$pass.$time.$user_ip);
  11.  
  12. if(!isset($_SESSION['uzytkownik']))
  13. {
  14. $_SESSION['uzytkownik'] = $sesja_anim; #inicjuje sesję użytkownika anonimowego
  15. echo "została zinicjowana sesja użytkownika anonimowego<br>";
  16. }
  17.  
  18.  
  19. if($_SERVER['REQUEST_METHOD'] == 'POST')
  20. {
  21. $login = $_POST['login'];
  22. $haslo = md5($_POST['password']);
  23.  
  24. if($_POST['login'] and !$_POST['password'])
  25. {
  26. echo "Musisz podać hasło!";
  27. }
  28.  
  29. if(!$_POST['login'] and $_POST['password'])
  30. {
  31. echo "Musisz podać login!";
  32. }
  33.  
  34. if(!$_POST['login'] and !$_POST['password'])
  35. {
  36. echo "Nie wypełniono pól!";
  37. }
  38. if($_POST['login'] and $_POST['password'])
  39. {
  40.  
  41. $pobierz_usera = mysql_query("select username,user_password from phpbb_users where `username`='$login'");
  42. while($napisz_usera = mysql_fetch_row($pobierz_usera))
  43. {
  44. $user = $napisz_usera[0];
  45. $pass = $napisz_usera[1];
  46. }
  47.  
  48. if($login != $user)
  49. {
  50. echo "Nie ma takiego użytkownika";
  51. }
  52.  
  53. else
  54. {
  55. if($pass == $haslo)
  56. {
  57. $_SESSION['uzytkownik'] = $sesja_uzytkownika;
  58. $sesja_anim = "";
  59. echo "Zalogowany jako $user <br> <a href=logowanie.php?akcja=wyloguj>Wyloguj</a>";
  60. }
  61. else
  62. {
  63. echo "podano złe hasło!";
  64. }
  65. }
  66.  
  67. }
  68. }
  69.  
  70. if($_SESSION['uzytkownik'] == $sesja_anim)
  71. {
  72. echo "<form action=logowanie.php method=post>
  73. <input type=text name=login><br>
  74. <input type=text name=password><br>
  75. <input type=submit value=\"Zaloguj\">
  76. </form>
  77. ";
  78. }
  79.  
  80.  
  81.  
  82. if($akcja == 'wyloguj')
  83. {
  84. $sesja_uzytkownika = "";
  85. $_SESSION['uzytkownik'] = $sesja_anim;
  86. echo "Zostałeś wylogowany<br><a href=logowanie.php>Wróć</a>";
  87. }
  88.  
  89. ?>


Ten post edytował MGreg 26.03.2008, 16:21:56
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Cysiaczek
post 26.03.2008, 16:18:04
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Popraw proszę tytuł topiku na zgodny z zasadami forum Przedszkole


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
Petermechanic
post 26.03.2008, 16:42:36
Post #3





Grupa: Zablokowani
Postów: 47
Pomógł: 7
Dołączył: 6.05.2007

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


Skrypt nie jest do końca bezpieczny, jest narażony na SQL Injection. Szczególnie pobieranie użytkownika po nicku. Nie zabezpieczyłeś niczym $_POST['login']

Ten post edytował Petermechanic 26.03.2008, 16:42:59
Go to the top of the page
+Quote Post
MGreg
post 26.03.2008, 16:45:49
Post #4





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 18.09.2007

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


Pisząc to nie skupiałem się na zebezpieczeniu zapytań, ale dzięki winksmiley.jpg Teraz pozostaje tylko sprawa bezpieczeństwa sesji.
Go to the top of the page
+Quote Post
Petermechanic
post 26.03.2008, 21:54:30
Post #5





Grupa: Zablokowani
Postów: 47
Pomógł: 7
Dołączył: 6.05.2007

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


sesje jako tako same nie są narażone na atak, chyba, że ktoś z tego samych ustawień serwera przechwyci cookie i tym samym id sesji, albo sesja ma czas życia i zachowuje się po resecie przeglądarki - można ją łatwo wykraść
Go to the top of the page
+Quote Post
Pilsener
post 27.03.2008, 08:21:48
Post #6





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Ale warto się zabezpieczyć, używać takich rzeczy jak:
ini_set('session.use_only_cookies', true);
output_add_rewrite_var
session_regenerate_id

Identyfikatory sesji powinny być przekazywane tylko przez cookie - warto to wymusić. Dodatkowo można też dodać dodatkowy znacznik sesji, który będzie przekazywany w adresie URL. Dałbym link do jakiegoś praktycznego przykładu, niestety nie znalazłem takiego (ale może słabo szukałem winksmiley.jpg
Go to the top of the page
+Quote Post
-mag32-
post 30.03.2008, 09:52:08
Post #7





Goście







Taka drobna uwaga. Wydaje mi się, że nie powinieneś zwracać komunikatu o błędzie hasła lub loginu, jeśli już, to komunikat o błędzie jednego lub drugiego.
Czyli: "Zły login lub hasło"

To taka drobniutka uwaga.
Go to the top of the page
+Quote Post
help_mee
post 30.03.2008, 09:56:49
Post #8





Grupa: Zarejestrowani
Postów: 244
Pomógł: 21
Dołączył: 10.02.2008
Skąd: Załęcze Wielkie

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


Tak jak powiedział Petermechanic zabezpiecz to przed SQL Injection.
Najlepiej
  1. <?php
  2. $login = addslashes($_POST['login']);
  3. ?>


--------------------
Amentis dolet!
Deus et patria!
» Pomogłem? Kliknij Pomógł.
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: 13.08.2025 - 23:23