Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System sesji - czy mój kod jest optymalny?
Forum PHP.pl > Forum > PHP
klapaucius
Witam. Oto mój kod związany z systemem sesji ma na mojej stronie. Chodzi tu o przechowywanie zmiennej z identyfikatorem użytkownika oraz czasem, po którym sesja wygasa:
  1.  
  2. if (!isset($_SESSION['inicjuj'])){ // 1 zabezpieczenia sesji
  3. $_SESSION['inicjuj'] = true;
  4. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  5. }
  6. if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']){ // 2 zabezpieczenie sesji
  7. header("Location: ../index.php?page=glowna");
  8. }
  9.  
  10. $intTimeoutSeconds = 600; // ustawienie czasu sesji
  11.  
  12. if (!isset($_SESSION['zalogowany'])) { // jeśli zmienna nie jest zarejestrowana
  13. $_SESSION['zalogowany'] = 0; // przypisz jej początkową wartość
  14. }elseif(($_SESSION['intLastRefreshTime']+$intTimeoutSeconds)<time()){
  15. if($_SERVER['PHP_SELF'] != '/index.php'){
  16. header("Location: ../index.php?page=glowna&sesja_wygasla=tak");
  17. }else{
  18. header("Location: ../index.php?page=glowna");
  19. }
  20. }
  21.  
  22. $_SESSION['intLastRefreshTime'] = time();
  23.  
  24. if($_SESSION['zalogowany'] == 0 && $_SERVER['PHP_SELF'] == "/game/index.php"){ // jesli uzytkownik nie jest zalogowany
  25. header("Location: ../index.php?page=glowna");
  26. }elseif($_SESSION['zalogowany'] != 0 && $_SERVER['PHP_SELF'] == "/index.php"){ // podobnie jak wyzej
  27. header("Location: game/index.php?page=main");
  28. }


Czy kod jest w miarę optymalny? Czy coś w nim trzeba zmienic? Jak narazie działa ale wydaje mi się ze jest trochę za długi i że ma jakieś błędy... Czy mam rację? Czy można go jakoś bardziej zoptymalizować czy jest ok?
darko
Ogólnie straszna sieka w kodzie, a jak ktoś pisze, że $_SERVER['REMOTE_ADDR'] jest jakimkolwiek zabezpieczeniem, to... zostawię to bez komentarza. Nie ma tu czego oceniać, gdyż skrypt w ogóle nie jest napisany w taki sposób, aby można byłoby się nim podzielić (brak jakiejkolwiek parametryzacji czy możliwości "zcustomizowania").
klapaucius
Cytat(darko @ 6.10.2011, 15:59:38 ) *
jak ktoś pisze, że $_SERVER['REMOTE_ADDR'] jest jakimkolwiek zabezpieczeniem, to... zostawię to bez komentarza.

Czyli że można to wywalić?

P.S.

Nie piszę wcale tego kodu, aby się z kimś dzielić ale do moich indywidualnych potrzeb pod stronę. Zdaję sobie sprawę, że nie jest on zbyt "optymalny" jeśli można to tak nazwać.. Ale właśnie dlatego napisałem ten temat żebyście mi doradzili co tam można by zmienić czy coś...
darko
Może nie aż tak, że od razu wywalić. Ogólnie kod szału nie robi, a i też niewiele z bezpieczeństwa sobą reprezentuje. Oczywiście na potrzeby własne i treningowo można takie skrypciki pisać. Trudno jest mówić o optymalizacji skryptu, który nie wykonuje żadnych zaawansowanych operacji (brak algorytmu) i objętościowo zajmuje około trzydziestu linii kodu.
klapaucius
Rozumiem. W każdym bądź razie żadnych konkretnych błędów w nich nie ma i ogólnie powinien jako tako działać poprawnie? Oczywiście zdaję sobie sprawę, że nie ma on żadnych zabezpieczeń itp. ale on będzie działał pod moją pierwszą, w miarę prostą stronkę. Poza tym dopiero się uczę i nie znam żadnych zaawansowanych technik z zabezpieczaniem systemu sesji...
A jeszcze jedno... Co np. grozi mi poprzez używanie takiego kodu. Czy coś poważnego taki pseudo-haker może uczynić na mojej stronie? Oczywiście chodzi mi tu dokładnie o sesje.
darko
Może np. sfałszować wartość $_SERVER['REMOTE_ADDR'] i podszyć się pod kogoś z zupełnie innym adresem ip, poczytaj o session fixation
rotflonline.pl
Troszke nie po naszemu. Znaczy tak do zabawy może być tylko po co? Masz tu linka do naprawde fajnej klasy sesji:

http://www.richardcastera.com/projects/php5-session-class

wraz z instrukcją obsługi.

Takie pytanie: po co Ci ten kod sesji? Co on ma chronić? Jak logujesz użytkownika? Jakie ma prawa? Pisz obiektowo. PHP podobno jest bardziej obiektowy niż sama obiektowość? Można gdzieś zobaczyć tą stronę, którą tworzysz?
Tworzysz aplikacje? Przyjrzyj się jak się tworzy proste CMS-y:

http://buup.mephir.com/read/create-your-ow...ysql-cms-part-i

http://buup.mephir.com/read/create-your-ow...sql-cms-part-ii

Ewenetualny hacker co może zrobić? Pokaż pełny kod stronki, i zaraz zobaczymy. smile.gif

Życzymy powodzenia i dużo cierpliwości. Pamiętaj, nie wyważaj otwartych drzwi, nie ma to sensu raczej.

Z poważaniem
Zespół rotflonline.pl
klapaucius
Mój system logowania jest bardzo prosty i wygląda nastepująco:
  1. $user = mysql_fetch_array(mysql_query("SELECT * FROM `uzytkownicy` WHERE `uzytkownik` = '".$_POST['user']."'"));
  2. if($user){
  3. if($user['haslo'] == $_POST['password']){
  4. $_SESSION['zalogowany'] = $user['id'];
  5. }
  6. }


Oczywiście pewnie dostanę teraz ochrzan, że to jest "jedna wielka dziura", bardzo prosta do złamania... smile.gif
lukaskolista
jest az za prosty, powinienes hashowac hasla uzytkownikow trzymane w bazie
darko
Kod, który podałeś jest podatny na atak Sql Injection. //edit: m.in. na tego typu ataki, poczytaj o sql injection przynajmniej na wikipedii (nie mam czasu szukać za ciebie, jes bardzo dużo bardzo dobrych artykułów na ten temat, wystarczy poszukać)., zapytaniach preintepretowanych i ogólnie korzystaj z PDO i nigdy, przenigdy nie ufaj danym pochodzącym bezpośrednio od użytkownika (wstawiasz dane z post bezpośrednio do zapytania sql, które wykonujesz).
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.