Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] jakie robic sesje?
Forum PHP.pl > Forum > Przedszkole
hermo767
witam, troche poczytalem, ale nic konkretnego nie znalazlem, a jak juz to sprzed paru lat

czy wbudowane do php sesje sa na prawde az tak niebezpieczne, zeby z nich nie korzystac?
slyszalem cos o jakis handlerach, ktore poprawiaja bezpieczenstwo, ale nigdzie nie znalazlem jakiegos przykladowego zastosowania tego.

Hpsi
Sessje niebezpieczne? owszem jesli ich nie zabezpieczysz sa niebezpieczne smile.gif
poczytaj to: http://pl.wikibooks.org/wiki/PHP/Sesje powinno odpowiedzieć ci na niektóre pytania
hermo767
czyli jak zrobie na podstawie tego z wikibooks to raczej nie mam sie co obawiac?
Hpsi
Raczej żadnych problemów z włamami / przechwycenami sessji nie miałem smile.gif
hermo767
cos czytalem o problemach z hostingami, ze jak na jednym jest kilka stron z sesjami to mozna przechwycac
matino
Jeśli masz kilka serwisów na serwerze to korzystając z sesji musisz:
a) używać innych identyfikatorów sesji dla każdego serwisu albo
cool.gif zapisywać sesję każdego serwisu w dedykowanym katalogu

Zdecydowaniem bezpieczniejszym rozwiązaniem jest opcja cool.gif - wystarczy w .htaccess ustawiać zmienną session.save_path na unikalny katalog.
hermo767
czyli jakby to mialo wygladac, bo nie bardzo rozumiem
matino
Domyślnie każda sesja na serwerze zapisuje się w katalogu ustawionym w php.ini.
Jeśli masz kilka serwisów na 1 serwerze to wszystkie sesje lądują w tym samym katalogu.
Żeby tego uniknąć możesz dodać w pliku .htaccess w katalogu głównym każdego serwisu linijkę:
  1. php_value session.save_path pełna_ścieżka_do_folderu

czyli np. jeśli masz serwis o nazwie example, to
a) tworzysz katalog example w katalogu z sesjami (załóżmy, że temp)
cool.gif dodajesz wpis do .htaccess
  1. php_value session.save_path "pełna_ścieżka_do_folderu temp/example"

hermo767
dzieki, na tej stronie jeszcze jest napisane o ochronie przed Session Hijacking
i jako sposob podane $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
a co jak mam zrobione zapamietywanie usera na cookie? wtedy jak ktos ma zmienne IP to sesja padnie. jest jakis lepszy sposob?
nekomata
można też za pomocą php ustawić folder sesji. session_save_pathMożesz zrobić coś takiego
  1. $dane = md5($_SERVER['HTTP_USER_AGENT'].sha1($_SERVER['HTTP_ACCEPT_LANGUAGE']).'tak zwana sól...');
i wiadomo dane wrzucasz do sesji i do ciastka , i sprawdzasz potem.
hermo767
Cytat(hermo767 @ 13.04.2011, 21:52:40 ) *
dzieki, na tej stronie jeszcze jest napisane o ochronie przed Session Hijacking
i jako sposob podane $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
a co jak mam zrobione zapamietywanie usera na cookie? wtedy jak ktos ma zmienne IP to sesja padnie. jest jakis lepszy sposob?


moglby ktos jeszcze na to odpowiedziec? smile.gif

i jeszcze jedno.
jakos udalo mi sie zrobic to z cookie i ladnie mi dziala zapamietywanie, ale obawiam sie, ze to nie jest bezpieczne.
jak zaznaczy sie przycisk to zapisuje cookie tak:
  1. setcookie("aaa[username]", $username, $time + 3600);
  2. setcookie("aaa[password]", $password, $time + 3600);


a potem to odczytuje :
  1. if(isset($_COOKIE['aaa'])) {


ale wydaje mi sie ze tak to sobie wystarczy wyciagnac ciasteczko z komputera i kazdy sie podlaczy, wiec co tu jest musze dodac?
matino
Zostaw cookies w spokoju i przechowuj wszystkie dane sesji na serwerze (
  1. $_SESSION['id'] = ...
)
Generalnie jeśli użytkownik się zaloguje, to ustawiasz w sesji tylko jego id / username. Przechowywanie hasła nie jest wskazane smile.gif
hermo767
ale chce zrobic zapamietywanie, zeby nie trzeba bylo sie za kazdym razem logowac
matino
No to robisz np. tak na początku każdej strony, do której ma być dostęp dla zalogowanych:
  1. if (!isset($_SESSION['id'])
  2. // przekieruj do strony logowania
hermo767
no tak, ale to mi nie zadziala jak zamkne przegladarke, bo wtedy sesja automatycznie sie skasuje, a dzieki cookies moge ja utrzymac.

powtarzam wiec pytania, zeby nie zaginely:

Cytat(hermo767 @ 13.04.2011, 21:52:40 ) *
dzieki, na tej stronie jeszcze jest napisane o ochronie przed Session Hijacking
i jako sposob podane $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
a co jak mam zrobione zapamietywanie usera na cookie? wtedy jak ktos ma zmienne IP to sesja padnie. jest jakis lepszy sposob?


moglby ktos jeszcze na to odpowiedziec? smile.gif

i jeszcze jedno.
jakos udalo mi sie zrobic to z cookie i ladnie mi dziala zapamietywanie, ale obawiam sie, ze to nie jest bezpieczne.
jak zaznaczy sie przycisk to zapisuje cookie tak:
  1. setcookie("aaa[username]", $username, $time + 3600);
  2. setcookie("aaa[password]", $password, $time + 3600);


a potem to odczytuje :
  1. if(isset($_COOKIE['aaa'])) {


ale wydaje mi sie ze tak to sobie wystarczy wyciagnac ciasteczko z komputera i kazdy sie podlaczy, wiec co tu jest musze dodac?
cim
Witam,

a czy nie lepiej zamiast w cookies zapisywać login i hasło po prostu zmienić czas ważności ciasteczka sesji? http://www.php.net/manual/en/session.confi...cookie-lifetime

Pozdrawiam
hermo767
no duzo lepiej, musze to wyprobowac smile.gif to dziala na tej samej zasadzie?

a co z pierwszym pytaniem?

cim
Witam,
Cytat(hermo767 @ 14.04.2011, 00:22:09 ) *
no duzo lepiej, musze to wyprobowac smile.gif to dziala na tej samej zasadzie?

tworząc sesję do użytkownika trafia ciasteczko z identyfikatorem jego sesji na serwerze. Domyślnie jest ono usuwane przy zamykaniu przeglądarki. Ustalając czas samemu możesz decydować jak długo ciasteczko będzie jeszcze na komputerze.

Pozdrawiam
hermo767
tylko z tego co tam wyczytalem to tez sie ustawia to w htaccess, wiec nie bede mogl zrobic if w kodzie php i zawsze kazdy bedzie mial przedluzona dlugosc ciastka, a nie tylko wybrani
nekomata
Jestem ciekawy gdzie takie "czary" wyczytujesz?2 link z google . A wybrani... możesz ustawić w ciastku np. ID i haslo usera z bazy.. albo jak chcesz mniej "czytelne" to dodaj kolumne w tabeli z userami coś jak "md5($user.$haslo.$data_rejestracji.$id)" wtedy ciastko będzie miału wygląd podobny do PHPSSID i nie będzie czytelne. tylko zabezpiecz strone przed XSS...
hermo767
no to tak jak mam teraz, ale chodzi o to, ze co za roznica czy haslo sie zaszyfrowane czy nie w przypadku wykradniecia ciastka? bo wtedy czy jest zaszyfrowane czy nie to nie ma znaczenia, bo i tak powinno odczytac. wiem, ze mozna wtedy wyciagnac tekstowo, ale mi chodzi o kwestie wykradniecia
kill15
A ja mam pytanie tak przy okazji arrowheadsmiley.png
Zaznaczę że z sesji korzystam minimalnie.
Co zrobić aby po zniszczeniu sesji , przyciskiem cofnięcia(strzałka w lewo) nie można było wrócić do np konta.
Np w grze ikariam jest to tak zrobione że pisze sesja wygasła czy jakoś tak ;>
ciekawskiii
nie chce zakladac nowego tematu bo co chwile jakis powstaje o sesji wiec napisze tutaj.
Chce wlasnie robic logowanie i nurtuje mnie pewna sprawa nt. bezpieczenstwa sesji, ma to wygladac tak:
1.loguje sie i do tabeli w bazie zapisuje przegladarke i wygenerowany jakis unikalny kod
2.kod ten wrzucam tez do sesji $_SESSION['zalogowany']=$kod
3.dla zalogowanego na kazdej podstronie sprawdzam:
- czy kod w sesji zgadza sie z kodem zapisanym w bazie.
- czy przegladarka zapisana w bazie zgadza sie z user agentem.
4.sesje w oddzielnym katalogu.
Pytanie do bardziej doswiadczonych w php, czy to jest bezpieczne?
modern-web
Po co sprawdzasz i porównujesz przeglądarki!? Bez sensu...
$kod radziłbym odpowiednio zaszyfrować (nie hashować tylko szyfrować... ;])
Jeśli nie korzystasz z kilku paneli mających identyczne sesje na jednym serwerze to zmiana katalogu nie ma większego znaczenia.
Jeśli chcesz podnieść bezpieczeństwo systemu logowania to proponuję podwójną sesję.
W jednej zapisuj $kod; w drugiej identyfikator przesyłany za każdym requestem logowania na maila użytkownika.
Stosuje ten sposób od roku i ani razu nie spotkałem się z ominięciem zabezpieczenia mojego autorstwa smile.gif

P.S.
kill15:

  1. session_unset('identyfikator');

przycisk wstecz na nic się tutaj nie przyda wink.gif
ciekawskiii
czemu sprawdzanie przegladarki bezsensu?
Chodzi o to, ze ktos moze wykrasc sesje a ja wlasnie nie bardzo wiem na jakiej zasadzie dziala kradziez/przechwycenie sesji i stad moje obawy.
Kod oczywiscie bedzie jakos szyfrowany, z tym nie ma problemu.
Co do podwojnej sesji i wysylania identyfikatora to nie bardzo rozumiem...
modern-web
Kradzież sesji nie opiera się na różnicach między przeglądarkami tylko lukach w zabezpieczeniach sesji. Sesję można wykraść jeśli nie została ona unieważniona podczas wylogowania lub na tym samym serwerze znajdują się 2 takie same panele, które inicjują identyczne sesje.
Podwójna sesja: nie inicjujesz 1 sesji z wartością np. nazwy użytkownika ale 2 - np. zaszyfrowane hasło i unikatowy kod, który przy każdym logowaniu jest zupełnie inny.
- użytkownik podaje login i haslo
- inicjacja 1 sesji
- w tym momencie na jego maila wysyla sie unikatowy kod
- uzytkownik wpisuje kod
- inicjacja 2 sesji
- przekierowanie na strone dla zalogowanych
- sprawdzenie, czy obie sesje są aktywne i czy obie są identyczne jak wartosci przypisane w bazie danych (jeśli korzystasz...)
ciekawskiii
to ja wiem tylko ta sesja jest wtedy aktywna na tej jednej przegladarce zapisanej w bazie, jesli ktos ja wykradnie to bedzie bezuzyteczna bo skad atakujacy bedzie wiedzial jaka to przegladarka?
Mozna tez zamiast przegladarki zapisac hosta i wg mnie jest to dobre rozwiazanie...
Twoj pomysl jest dobry ale jakbym musial tak sie logowac na jakiejs stronie to szlag by mnie trafil:D
modern-web
Trzeba połączyć prostotę z bezpieczeństwem, a to niestety takie łatwe nie jest ;p
System jest bardzo funkcjonalny i jak na moje oko bezpieczny bardziej niż przeciętnie... Oczywiście za wygodne to nie jest ale jak chce się udostępniać bardzo ważne dane to lepiej skorzystać z takiego rozwiązania - dla dobra ogółu oczywiście smile.gif
Rid
A propo wykradnięcia sesji,można postawić stronkę na HTTPS,jeśli się jeszcze czegoś więcej wymaga to zapraszam do lekturki tego Pana:
http://www.ploug.org.pl/konf_00/pdf/dworakowski.pdf


Myślę,że to załatwi sprawę z jakimkolwiek nasłuchem sieci.
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.