Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ocena, opinia] Zabezpieczenia sesji MySQL, Sesja pobierana z bazy danych.
Johnas
post
Post #1





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

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


Witam, stworzyłem baze danych o nazwie "Session", w której dodałem kolumny:
id - liczba porządkowa auto increment,
name - nazwa sesji
times - ostatni czas wykonywania działań
filename - plik w którym się znajdujemy (index.php, config.php)
user - id użytkownika (0 - gość, powyższe liczby to identyfikatory konta)
ip - ip na którym została utworzona sesja.

I napisałem kod PHP:
  1. $session_id = session_id();
  2. $timeSession = $config["TimeSession"];
  3. $session_ip = get_ip(false);
  4. $sess['user'] = 0; // sesja gościa
  5. mysql_query("DELETE FROM Sesssion WHERE times<'$timeSession'");
  6. if (isset($session_id))
  7. {
  8. $file = FileName;
  9. $sQuery = mysql_query("SELECT times, filename, user FROM Session WHERE name = '$session_id' and ip = '$session_ip'");
  10. $sWhile = mysql_num_rows($sQuery);
  11. if ($sWhile == 0)
  12. {
  13. mysql_query("INSERT INTO Session (name, times, filename, user, ip) VALUES ('$session_id', '$timeSession', '$file', '0', '$session_ip')");
  14. } else {
  15. $session = mysql_fetch_assoc($sQuery);
  16. if ($session['times']<$config['TimeSession'])
  17. {
  18. $timeSession = $config["TimeSession"];
  19. mysql_query("UPDATE Session SET times='$timeSession', filename='$file' WHERE name = '$session_id' and ip = '$session_ip'");
  20. $sess = mysql_fetch_assoc(mysql_query("SELECT times, filename, user FROM Session WHERE name = '$session_id' and ip = '$session_ip'"));
  21. } else {
  22. mysql_query("INSERT INTO Session (name, times, filename, user, ip) VALUE ('$session_id', '$timeSession', '$file', '0', '$session_ip')");
  23. }
  24. }
  25. }


TimeSession:
  1. // Czas Sesji
  2. $config["TimeSession"] = TIME_NOW+$config['TimeSession'];

Działanie kodu wygląda następująco. Na początku skrypt usuwa stare sesje gdzie czas przekroczył dozwolony limit trwania sesji (czas ustawiony przez administratora). Następnie skrypt pobiera nazwę sesji oraz ip od użytkownika, po czym sprawdza czy istnieje sesja w bazie danych z pobranymi parametrami (ip oraz nazwa sesji). Jeżeli nie istnieje taka sesja to tworzy taką sesje w bazie danych, jeżeli jednak istnieje to przydziela identyfikator który został wpisany do bazy. Początkowo user nie jest zalogowany przez co $sess['user'] wynosi 0, dlatego podczas poprawnego logowania następuje update tabeli "user" na identyfikator konta z pasującym loginem i hasłem wpisanym przez użytkownika.
I tutaj pytanie mam do doświadczonych użytkowników: czy moje główkowanie w celu zabezpieczenia się przed Session Hijacking da jakiś odpowiedni skutek, czy napisałem niepotrzebne pobieranie sesji z bazy danych?

Ten post edytował Jonek_1993 23.11.2013, 11:26:05


--------------------
Jak coś jest dobre, to nie znaczy że nie może być to lepsze - Ideały nie istnieją ;D
Strony internetowe Świnoujście
Go to the top of the page
+Quote Post

Posty w temacie


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: 21.08.2025 - 11:09