Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System logowania [do sprawdzenia]
Forum PHP.pl > Forum > PHP
Riklaunim
Zrobiłem prosty system logowania oparty o sesje:
  1. <?php
  2. // Bierz dane z tabeli userów
  3. include('./txtSQL.class.php');
  4. $sql = new txtSQL('./data');
  5. $sql->connect('root',''); 
  6. $sql->selectdb('rkcms_core');
  7. $results=
  8. $sql->execute('select',
  9.  array('select' => array('id', 'login', 'haslo', 'email', 'gg', 'tlen', 'strona', 'wiek', 'plec', 'ip', 'logdate', 'defcon', 'text'),
  10.  'table' => 'user'));
  11. //Zrób tablicę
  12. foreach ( $results as $key => $row )
  13.  {
  14. $user_array[$row[login]]=$row[haslo];
  15.  }
  16.  
  17. //Czy wprowadzone dane są ok?
  18. function checklogin()
  19. {
  20. global $login, $haslo, $user_array;
  21. $haslo = md5($haslo);
  22. IF ($user_array[$login]==$haslo)
  23.  {
  24.  return 1;
  25.  } else {
  26.  return 0;
  27.  }
  28. }
  29.  
  30. function logout()
  31. {
  32. session_name(&#092;"logowanie\");
  33. session_unregister(&#092;"login\");
  34. session_unregister(&#092;"haslo\");
  35. }
  36.  
  37. //Zaczynamy logowanie
  38. session_name(&#092;"logowanie\");
  39. IF ($login!=&#092;"\" and $haslo!=\"\" and !isset($_REQUEST[\"login\"]))
  40.  {
  41.  session_register(&#092;"login\", \"haslo\");
  42.  }
  43.  
  44. //Gdy niezalogowany
  45. IF ($login == &#092;"\" and $haslo == \"\" and !isset($_REQUEST[\"login\"]))
  46.  {
  47.  $action= &#092;"login\";
  48.  }
  49.  
  50. elseif(checklogin() == 1)
  51.  {
  52.  if ($action==&#092;"\")
  53.  $action = &#092;"zal\";
  54.  } else {
  55.  $action = &#092;"bad\";
  56.  logout();
  57.  }
  58.  
  59. //Prosta obsługa logowanie/zalogowany/błąd logowania... itp.
  60. switch($action)
  61. {
  62. case &#092;"login\":
  63. echo '<form><input type=text name=login><BR><input type=password name=haslo><BR><input type=submit value=Zaloguj></form>';
  64. break;
  65. case &#092;"bad\":
  66. echo 'błąd logowania';
  67. break;
  68. case &#092;"zal\":
  69. echo &#092;"zalogowany, <a href=\"?action=logout\\">wyloguj</a>.<BR>\";
  70. break;
  71. case &#092;"logout\":
  72. logout();
  73. echo &#092;"wylogowany\";
  74. break;
  75. }
  76. ?>

Skrypt sam w sobie działa... tylko mam pytanie czy jest "bezpieczny", czy nie da się go jakoś obejść albo coś zrobić lepiej winksmiley.jpg Jak ktoś chce może wykorzystać smile.gif
seaquest
Po 1. Przede wszystkim moim zdaniem system nie dziala,bo przeciez w funkcji checklogin() znienna user_array nie jest globalną

Po 2. ale to kwestia czasowa: po co ładować wszysktich userów, skoro można tylko jednego...

Po 3. Używaj tablic superglobalnych zamiast session_*

Po 4. System nie działa dlatego, że nie ma zmiennej $results zadeklarowanej - jest tylko zmienna $sql z rezultatami. (poczytaj troche manuala txtsql)

Tak wiec nie ma co dyskutowac o bezpieczeństwie zanim sie nie poprawi systemu.
Riklaunim
Mi skrypt działa poprawnie, logowanie, wylogowanie itd.

Cytat
Po 1. Przede wszystkim moim zdaniem system nie dziala,bo przeciez w funkcji checklogin() znienna user_array nie jest globalną


a niby to to co?
Kod
global $login, $haslo, $user_array;


Cytat
Po 4. System nie działa dlatego, że nie ma zmiennej $results zadeklarowanej - jest tylko zmienna $sql z rezultatami. (poczytaj troche manuala txtsql)

blink.gif Na txtSQL pracuję już od długiego czasu i wszystko mi działa tongue.gif Przecież jest w kodzie
Kod
$results=
    $sql->execute('select',

co jest standardowym, nie skróconym wywołaniem danych

Cytat
Po 2. ale to kwestia czasowa: po co ładować wszysktich userów, skoro można tylko jednego...

w sumie można dać ograniczenie w zapytaniu...
sf
Riklaunim:

http://pl2.php.net/manual/pl/ref.session.php

Cytat
Notatka:  Od wersji php 4.1.0 dostępna jest globalna zmienna $_SESSION, podobnie jak $_POST, $_GET, $_REQUEST i tak dalej. W odróżnieniu od $HTTP_SESSION_VARS, $_SESSION jest zawsze globalna. W związku z tym global nie powinno być użyte do $_SESSION.

Użycie $_SESSION (lub $HTTP_SESSION_VARS dla wersji php 4.0.6 i starszych) jest wskazane ze względów bezpieczeństwa i czytelności kodu. Używając $_SESSION lub $HTTP_SESSION_VARS nie ma potrzeby używać funkcji session_register()/session_unregister()/session_is_registered(). Użytkownicy mogą uzyskiwać dostęp do zmiennych sesyjnych tak jak do normalnych zmiennych.
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.