Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> System sesji - czy mój kod jest optymalny?
klapaucius
post
Post #1





Grupa: Zarejestrowani
Postów: 223
Pomógł: 3
Dołączył: 4.07.2009
Skąd: Kraków

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


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").
Go to the top of the page
+Quote Post
klapaucius
post
Post #3





Grupa: Zarejestrowani
Postów: 223
Pomógł: 3
Dołączył: 4.07.2009
Skąd: Kraków

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


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

Ten post edytował klapaucius 6.10.2011, 15:08:28
Go to the top of the page
+Quote Post
darko
post
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


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.
Go to the top of the page
+Quote Post
klapaucius
post
Post #5





Grupa: Zarejestrowani
Postów: 223
Pomógł: 3
Dołączył: 4.07.2009
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
darko
post
Post #6





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Może np. sfałszować wartość $_SERVER['REMOTE_ADDR'] i podszyć się pod kogoś z zupełnie innym adresem ip, poczytaj o session fixation
Go to the top of the page
+Quote Post
rotflonline.pl
post
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 6.10.2011

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


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. (IMG:style_emoticons/default/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

Ten post edytował Daiquiri 6.10.2011, 19:48:45
Powód edycji: [Daiquiri]: Usuwam link
Go to the top of the page
+Quote Post
klapaucius
post
Post #8





Grupa: Zarejestrowani
Postów: 223
Pomógł: 3
Dołączył: 4.07.2009
Skąd: Kraków

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


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... (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
lukaskolista
post
Post #9





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


jest az za prosty, powinienes hashowac hasla uzytkownikow trzymane w bazie
Go to the top of the page
+Quote Post
darko
post
Post #10





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


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

Ten post edytował darko 7.10.2011, 23:00:01
Go to the top of the page
+Quote Post

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: 23.08.2025 - 00:07