![]() |
![]() |
-wgasowski- |
![]()
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:
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 |
|
|
![]() |
![]()
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.. ![]() -------------------- "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:) |
|
|
-grzegorz_m- |
![]()
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 ![]() 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. |
|
|
![]()
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:) |
|
|
-Anonymous- |
![]() ![]()
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?
![]() |
|
|
![]()
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
|
|
|
-wgasowski- |
![]()
Post
#7
|
Goście ![]() |
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 ![]() Dzięki i pozdrawiam! |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 04:41 |