Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> System logowania [do sprawdzenia]
Riklaunim
post
Post #1





Grupa: Zarejestrowani
Postów: 640
Pomógł: 44
Dołączył: 8.02.2004

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


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


--------------------
Biblioteki: Skrypty, CMS | Kurs PHP | Python
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
seaquest
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


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.


--------------------
Michał Płachta
Warsztat: Mac OS X Leopard, PostgreSQL, Text Mate, Retrospectiva + SVN
Go to the top of the page
+Quote Post
Riklaunim
post
Post #3





Grupa: Zarejestrowani
Postów: 640
Pomógł: 44
Dołączył: 8.02.2004

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


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...


--------------------
Biblioteki: Skrypty, CMS | Kurs PHP | Python
Go to the top of the page
+Quote Post
sf
post
Post #4





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


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.


--------------------
Zapraszam na mój php blog, tworzenie stron.
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 Aktualny czas: 19.08.2025 - 22:37