Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Prosty sposób na uwierzytelnianie użytkownika
permanent
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 14.02.2009

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


Witam. Mam prostą stronę w PHP z systemem logowania użytkowników, kilkanaście podstron dostępnych po zalogowaniu i wyświetlane są osobne dane dla każdego użytkownika.

Jaki jest dobry, prosty i bezpieczny sposób na uwierzytelnianie użytkownika?

Jestem początkujący w PHP i chciałbym spytać czy mój sposób jest poprawny?

Plik index.php wyświetla stronę, w nim robię include podszczególnych podstron. Na samym początku mam:


W formularzu logowania jeżeli dane z bazą się zgadzają to podstawiam nick pod pierwszą zmienną, druga zmienna to aktualny adres IP, trzecia to informacja o zalogowaniu:

  1. $_SESSION['user_name'] = $q_user['username'];
  2. $_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR'];
  3. $_SESSION['user_logged'] = 'OK';


Wcześniej jeszcze mam zdefiniowaną prostą funkcję:

  1. function check_session()
  2. {
  3. if($_SESSION['user_logged'] == 'OK' && $_SESSION['user_ip'] == $_SERVER['REMOTE_ADDR']) return 1;
  4. else return 0;
  5. }


No dobra, teraz przed wyświetleniem strony dla użytkownika robię:

  1. if(check_session() == 1)
  2. {
  3. // wyświetlenie podstrony
  4. }


Przykładowe dane dla użytkownika wyciągam w sposób:
  1. $query = mysql_query('SELECT * FROM `data` WHERE `user`="'.$_SESSION['user_name'].'"');


Dodatkowo mam funkcję, która na bieżąco sprawdza czy poruszamy się na stronie (ostatni ruch). Jeżeli przez 2 godziny nie korzystaliśmy ze strony to automatycznie wylogowywuje:

  1. function destroy_session()
  2. {
  3. global $unixtime;
  4. if(check_session() == 1)
  5. {
  6. $expirytime = 7200;
  7. if(!isset($_SESSION['last_trace'])) $_SESSION['last_trace'] = $unixtime;
  8. else if((int)$_SESSION['last_trace'] + $expirytime < $unixtime)
  9. {
  10. $sessionName = session_name();
  11. $_SESSION = array();
  12. if(isset($_COOKIE[$sessionName])) setcookie($sessionName, '', $unixtime - 3600, '/');
  13. return 1;
  14. }
  15. }
  16. }


No i w index.php:
  1. if(destroy_session() == 1) echo 'Zostales wylogowany ze wzgledow bezpieczenstwa';


Proszę o opinie i rady. Strona jest prosta, jednak zawiera poufne dane użytkowników i nie dopuszczam żadnego włamu na stronę. Skrypt ma być prosty i bezpieczny. Kiedyś przy logowaniu miałem session_register(...), jednak mam nową wersje PHP i tego chyba już się nie używa?

Czy cokolwiek zmienić w tym kodzie? Czy jest to na 100% bezpieczny sposób? Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
b4rt3kk
post
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Zamiast sprawdzania IP użytkownika (co się stanie jeśli użytkownik korzysta z proxy?) korzystaj z ciasteczek (czy istnieje? czy zawiera prawidłowe dane?), sprawdzaj także czy klucz obecnej sesji (session_id()) zgadza się z tym który przypisano użytkownikowi.
Bardziej rozpowszechnionym rozwiązaniem jest przyrównywanie ID użytkownika, a nie jego nicku (sprawdzasz przy rejestracji czy taki już istnieje?) przy wykonywaniu zapytań.
Nie musisz mieć funkcji, która wylogowuje, wystarczy że ustawisz odpowiedni czas żywotności sesji.

To czy jest to bezpieczny sposób zależy także od tego jak wygląda formularz logowania od strony PHP.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 30.12.2025 - 17:54