Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Logowanie i sesje, Kwestia bezpieczeństwa
-wgasowski-
post 9.07.2008, 23:41:11
Post #1





Goście







Witam,
od jakiegoś już czasu we wszystkich moich projektach używałem sesji jako mechanizmu pamiętającego czy użytkownik się zalogował czy nie.
Ostatnio jednak przyszedł mi do głowy pomysł, że moje rozwiązanie nie jest chyba dobre.

Zasada działania jest bardzo prosta. Wysyłam formularz metodą POST do jakiegoś skryptu, tam sprawdzane jest czy pola zostały wypełnione, porównywane są z jakimś wzorcem (pliki, baza danych, itd.) i w przypadku powodzenia do zmiennej sesyjnej zapisywany jest ID użytkownika, który się zalogował. Wówczas "tajna" część strony zostaje odblokowana poprzez spełnienie prostego warunku (jeżeli zmienna sesyjne jest niepusta to użytkownik jest zalogowany). Przykładowy kod poniżej:

  1. <?
  2. //logowanie
  3. if($_POST['login'] == 'test' && $_POST['haslo'] == 'test')
  4. $_SESSION['logged'] = 5; //przykladowe ID uzytkownika test
  5.  
  6. //dostep do tajnej strony
  7. if($_SESSION['logged']!='') echo 'To jest tajna wiadomosc';
  8. else echo 'Zaloguj sie';
  9. ?>

Moje pytanie jest następujące: czy i na ile jest to bezpieczne rozwiązanie? Jedyną weryfikacją tego czy użytkownik jest zalogowany czy nie jest sprawdzenie zawartości zmiennej sesyjnej $_SESSION['logged'].
Gdyby mechanizm oparty był o COOKIE wówczas bez problemu można byłoby zmienić (ręcznie) wartość COOKIE na dowolną różną od pustej. Jak ma się to w porównaniu z sesjami? O ile dobrze pamiętam, dane sesji zapamiętywane są także w COOKIE?

Proszę o pomoc.

Z góry dzięki, pozdrawiam
Wojtek
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
dadexix
post 10.07.2008, 05:50:16
Post #2





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


sesje działają w sposób prosty:
->Wysłanie session id do servera przez cookie
-Server sprawdza id sessji w bazie(domyślnie opartej na plikach schowanych w systemie(lub jeśli użyjesz session_save_path" title="Zobacz w manualu PHP" target="_manual są w określonym przez Ciebie miejscu, za pomocą Session_handler" title="Zobacz w manualu PHP" target="_manual można użyć bazy sql czy własnego systemu plików, po sprawdzeniu wszysykie dane w sesjach przesyłane są do skryptu a Ty tam możesz je zmieniać/usuwać/dodawać przez tablice $_SESSION

Gdy masz cookie wszystko to co trzymasz w bazie sessji masz w pliku cookie a co za tym idzie? - user sam może zmieniać dane bez Twojej wiedzy!

Chyba wiadome że sesje bezpieczniejsze:)

A dodatkowo z własnego doświadczenia powiem Ci że lepiej nie tylko id trzymać w sessji ale i inne dane które nie są duże i mogą się często przydać, przykładowo mamy sytuacje user chce zmienić hasło, więc podaje stare i nowe, by sprawdzić czy stare jest poproawne odpytujesz baze i porównujesz, a przecież mogłeś zrobić to samo tylko na sessjach..smile.gif wiele przykładów można... oczywiście sessji nie wolno zapychać czym się da, aczkowiek takie dane jak poziom uprawnień(user, admin,mod[..]), nick, pass, id można trzymać:)


--------------------
"Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...]
Grins: mów normalnie do mnie a nie po polsku
Ja: normalnie to znaczy jak?
Grins: No w PHP... inaczej mój parser ledwo kuma:)
Go to the top of the page
+Quote Post
-grzegorz_m-
post 10.07.2008, 06:43:31
Post #3





Goście







Cytat
user chce zmienić hasło, więc podaje stare i nowe, by sprawdzić czy stare jest poproawne odpytujesz baze i porównujesz, a przecież mogłeś zrobić to samo tylko na sessjach..

Przecież pytanie w stylu "podaj stare hasło" ma za zadanie wyeliminować możliwość zmiany hasła przez tzw. osoby trzecie, gdy Ty np. jesteś w WC aaevil.gif
Nie widzę więc sensu robienia tego w sesji, bo takowa nie ma możliwości sprawdzić, czy rzeczywiście ja siedzę na fotelu przed moim komputerem a nie np. mój dowcipny kolega/brat/siostra/itd.
Go to the top of the page
+Quote Post
dadexix
post 10.07.2008, 06:47:00
Post #4





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


chodziło mi o inną rzecz... gdy masz pass w sessjach robisz
if($_GET['pass'] == $_SESSION['pass'])
A ile czasu by zajeło połączenie z bazą, ściągnięcie, sprawdzenie?(a pisanie tego? też troche)

To był przykład, że bardziej się opłaca trzymać dane proste dane w sessji niż tylko w bazie ale bez przesady, nie mówie tylko o zmienia pass ale o mniejscach gdzie lepiej poprosic o pass po raz drugi:)


Tylko wole sobie powtórzyć - nie trzymać all w sessji bo nie ma po co:)


Lecz schodzimy z tematu, poprostu, jeśli ID usera ma być dowodem na zalogowanie i jest wybór sessje/cookie to wiadome ze sessje bo cookie możesz edytować i "być" kimś innym:)

Ten post edytował dadexix 10.07.2008, 06:50:40


--------------------
"Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...]
Grins: mów normalnie do mnie a nie po polsku
Ja: normalnie to znaczy jak?
Grins: No w PHP... inaczej mój parser ledwo kuma:)
Go to the top of the page
+Quote Post
-Anonymous-
post 10.07.2008, 13:14:37
Post #5





Goście







Czyli dane zawarte w tablicy $_SESSION mogą być zmieniane tylko przez serwer i ich edycja jest niedostępna dla zwykłego użytkownika, co powoduje, że używanie tego sposobu jest bezpieczne? smile.gif
Go to the top of the page
+Quote Post
Shili
post 10.07.2008, 13:18:44
Post #6





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Tak, jeden z nielicznych problemów spokojnie możesz rozwiązać dzięki używaniu podanego wcześniej session_save_path" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post
-wgasowski-
post 10.07.2008, 17:14:59
Post #7





Goście







Cytat(dadexix @ 10.07.2008, 05:50:16 ) *
sesje działają w sposób prosty:
->Wysłanie session id do servera przez cookie
-Server sprawdza id sessji w bazie(domyślnie opartej na plikach schowanych w systemie(lub jeśli użyjesz session_save_path" title="Zobacz w manualu PHP" target="_manual są w określonym przez Ciebie miejscu, za pomocą Session_handler" title="Zobacz w manualu PHP" target="_manual można użyć bazy sql czy własnego systemu plików, po sprawdzeniu wszysykie dane w sesjach przesyłane są do skryptu a Ty tam możesz je zmieniać/usuwać/dodawać przez tablice $_SESSION

Dzięki właśnie o to mi chodziło. Po napisaniu tego posta jeszcze się zastanawiałem i doszedłem do wniosku, że w cookie przechowywany jest tylko identyfikator sesji, która z kolei zapisana jest gdzieś na serwerze (bez możliwości ingerencji ze strony użytkownika).

Chciałbym zaznaczyć, że ta odpowiedź mi pomogła, ale albo nie mogę znaleźć tej opcji albo muszę wykorzystać mechanizm sesji w praktyce będąc zalogowanym tongue.gif

Dzięki i pozdrawiam!
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:41