konto usunięte

Temat: Funkcja "zapamiętaj mnie podczas logowania".

Hubert Wesołowski:
Stanisław Głogowski:
Jakub Świegot:
$_SESSION['login'] = $user_id;

;-)))

Dzięki Jakubie właśnie o to chodziło ;)

1) widze ze dla Ciebie pojecie sesji to tablica $_SESSION w PHP. czyli jesli ktos korzysta z wlasnych mechanizmow to nie obsluguje
sesji?!?

Najprościej można to tak ująć ;) ... a to jakiego mechanizmu użyjesz by ją zapisać (pliki, baza danych) i jak sobie korzystanie z tej tablicy zrealizujesz to już Twoja sprawa.
2)czyli wystarczy ze zgadne czyjes $user_id i moge sie wbic na jego konto?
nice :D.

No raczej nie bardzo ... chyba że masz dostęp do serwer'a gdzie sesja jest trzymana. Po stronie użytkownika jest tylko identyfikator sesji.

konto usunięte

Temat: Funkcja "zapamiętaj mnie podczas logowania".

Zaczyna mieć wrażenie, że ta dyskusja schodzi na tematy w stylu "jak się powinno oddychać i czy to ma sens". Wszystkim, którzy pragną dokonać głębokiego namysłu nad tym jak "się pisze" mechanizm sesji do logowania ogólnie polecam rzucić okiem na kod źródłowy PEAR::Auth, albo implementację tego zagadnienia w którymś z frameworków (Zend, Symfony, CI, Prado, etc.)Jakub B. edytował(a) ten post dnia 06.06.08 o godzinie 11:01

konto usunięte

Temat: Funkcja "zapamiętaj mnie podczas logowania".

Hubert Wesołowski:
2)czyli wystarczy ze zgadne czyjes $user_id i moge sie wbic na jego konto?
nice :D.

Bo się nie daje użytkownikom ID z tabeli i od jedynki w górę auto-incrementem.

Przydzielaj userom hash md5 lub cokolwiek innego, jakiś uniqid() czy cokolwiek.

Wtedy będzie Ci baaaardzo łatwo odgadnąć czyiś user ID :D

nice :D
Jakub Korupczyński

Jakub Korupczyński Software Developer

Temat: Funkcja "zapamiętaj mnie podczas logowania".

Jakub Świegot:

Bo się nie daje użytkownikom ID z tabeli i od jedynki w górę auto-incrementem.

Przydzielaj userom hash md5 lub cokolwiek innego, jakiś uniqid() czy cokolwiek.

Wtedy będzie Ci baaaardzo łatwo odgadnąć czyiś user ID :D

nice :D

Portal społecznościowy - id użytkowników, choćby generowane losowo są widoczne na zewnątrz jak wchodzisz w profil danego użytkownika.

Afera naszej klasy(bo pewnie to do tego przypadku konkretnego się odnosisz ale mogę się mylić:) ) była dla mnie bzdurą, bo nie można opierać zabezpieczeń na tym że użytkownicy nie mają numerków 1,2,3,4 tylko inne losowe, bo numerek sam w sobie i tak wyciągniesz. A samo "włamanie" które tam miało miejsce było na poziomie spisania numerów telefonów z książki telefonicznej. To też nie potrzebne ryzyko pobrania danych osobowych nie ?:)

Tak czy inaczej według mnie do powiązania użytkownika z jego kontem nie może być w żadnym wypadku użyty login, powinien to być jakiś losowo wygenerowany klucz, zresztą zmieniany po każdym zalogowaniu np.
Hubert Wesołowski

Hubert Wesołowski Człowiek od krycia
dachów podczas
deszczu (mokrej
roboty).

Temat: Funkcja "zapamiętaj mnie podczas logowania".

Stanisław Głogowski:
2)czyli wystarczy ze zgadne czyjes $user_id i moge sie wbic na jego konto?
nice :D.

No raczej nie bardzo ... chyba że masz dostęp do serwer'a gdzie sesja jest trzymana. Po stronie użytkownika jest tylko identyfikator sesji.

chyba jednak bardzo, dostep do serwera nie jest potrzebny, wystarczy zgadnac identyfikator sesji.

P.S. Jakubie K. nie odnosze sie do przypadku naszej klasy. zreszta inna rzecz fakt wlamania, inna jego mniej lub bardziej smieszne skutki. w dyskusji na temat bezpieczenstwa sesji bardziej istotny jest fakt wlamania a nie jego skutki :).

P.S.2 Jakubie S. md5 bedzie dobre tylko pod warunkiem uzycia losowego argumentu na wejsciu, md5 z loginu czy seriala oczywiscie sie nie sprawdzi.
Szymon Perski

Szymon Perski Właściciel
PerskiMedia

Temat: Funkcja "zapamiętaj mnie podczas logowania".

Hubert Wesołowski:
w sesji zazwyczaj trzyma sie sporo danych, ich nieuprawniona modyfikacja moze czasem przyniesc trudne do przewidzenia skutki.

po stronie klienta zapisujesz tylko 1 parę danych: np. id sesji i login. resztę po stronie serwera. dane po stronie klienta maja sluzyc tylko odnalezieniu sesji na serwerze, niczemu wiecej. parę danych trudniej odgadnac niz pojedyncze id sesji. ew. mozna trzymac id sesji podpisane niejawnym kluczem, ale to tez oznacza trzymanie 2 wartosci.

moze nieprecyzyjnie sie wyrazilem - chodzilo o to, aby nie dopiscic do sytuacji w ktorej np. sa wyswietlane jakies dane wylacznie na podstawie filtru pobranego z cookie.


Jest to troche niebezpieczne bo mozna dosc latwo takie cos zlamac. Lepiej trzymac w ciachu jakikolwiek hash (byle sie nie powtórzyl) podczas dodawaania nazwijmy te wartosc tokenem. W bazie jest tabela autologin i jesli znajduje sie w niej rekord o wartosci znalezionej w ciachu to jest autologin. Dodam jeszcze ze w tabeli autologin powinny znajdowac sie jeszcze na dobra sprawe dane usera na podstawie ktorych bedziesz wiedzial kogo autologowac. bezpieczniej jest trzymac dane usera po stronie bazy.
Alan Gabriel B.

Alan Gabriel B. Software Engineer,
IFX

Temat: Funkcja "zapamiętaj mnie podczas logowania".

Szymon Perski:
[...]

Chyba pierwsza naprawdę profesjonalna odpowiedź jaką tu znalazłem. Krótko i do rzeczy.

Ktoś tu sugerował trzymanie danych do logowania w sesji. A co jeżeli sesja się skończy i zostanie usunięta (garbage-colector, jest generalnie nieprzewidywalny)? I co jeżeli użytkownik zechce mieć autologon na dwóch kompach - niewykonalne, gdy sesja przypisana jest do jednego użytkownika i powinna tak naprawdę trwać od otwarcia do zamknięcia przeglądarki (wynika to z architektury). Powyższe rozwiązanie jest jednym z lepszych - oczywiście zamiast bazy, można użyć czegoś innego.
Wyłuskałem z postów 3 następujące zasady:
1. Nie trzymać tego w sesji
2. Nie trzymać pełnych szczegółów logowania w ciastku;
3. Nie pozwolić powiązać danych po stronie użytkownika z samym użytkownikiem.

Pozdrawiam, Alan.Alan B. edytował(a) ten post dnia 06.07.08 o godzinie 12:02
Krzysztof P.

Krzysztof P. Programista, Team
Leader

Temat: Funkcja "zapamiętaj mnie podczas logowania".

Rozpoznawanie użytkownika odbywa się przez Cookie (darujmy sobie URL), a najlepiej aby tam był unikalny ciąg znaków, i tak jak zaznaczają koledzy, nie związany z użytkownikiem, po prostu jakiś losowy ciąg.
Jak przechowywać informacje o sesji? A na to jest wiele sposobów, można chociażby przejąć kontrolę nad domyślnym mechanizmem $_SESSION, i tam sobie zrobić na czym dusza zapragnie.
Co do pamiętania osoby, moim zdaniem, powinna być opcja, czy autologowanie może być tylko na jednej przeglądarce, czy wielu.
Oczywiście cała sprawa opiera się na tym, że cookie jest pamiętane przez długi czas w przeglądarce, dzięki czemu można zidentyfikować taką osobę, aby to było długi okres czasu, dane o sesjach z autologowaniem też powinny być tyle przechowywane ile cookie, potem jak już wiadomo że cookie zniknął, można je spokojnie usunąć (odblokowując hash), te co nie mają autologowania to już zależności od konwencji, cookie do końca sesji ale kiedy usuwanie danych z bazy?
Alan Gabriel B.

Alan Gabriel B. Software Engineer,
IFX

Temat: Funkcja "zapamiętaj mnie podczas logowania".

Michał S.:cookie do końca sesji ale kiedy usuwanie danych z bazy?

Ale to nie jest problem - dane które przechowujemy należą bez pośrednio do użytkownika systemu i są tak trwałe jak jego konto. Chodzi o to, żeby wczytać te dane do sesji (tej czysto przeglądarkowej) po jej zainicjowaniu, żeby uniknąć wypytywania bazy.

Wygląda to tak:
1.a. User się loguje.
1.b. User się loguje zaznaczając "zapamiętaj mnie". Postępujemy ta ja było opisywane wyżej)
2. Nowa sesja; Wczytywane są jego dane i zapisywane w sesji.
3. Każde następne odświeżenie, wskazuje na status zalogowany (tutaj każdy rozwiązuje to jak chce), więc nie pobieramy wszystkich danych o użytkowniku z bazy.
4. User zamyka przeglądarkę sesja się gubi, tak jak nakazał Bóg.
5. User wraca na stronę. Jeżeli 1.b to autologujemy usera i przechodzimy od razu do 2. inaczej do 1.a

edit:
Jedyne o czym trzeba pamiętać to synchronizacja danych, zapisując coś do bazy związanego bezpośrednio z użytkownikiem zapisujemy także w sesji inaczej możemy coś zgubić po drodze.
edit:
No i oczywiście są też dane, których wcale nie potrzebujemy pomiędzy logowaniami (np. stany formularzy wielostronnicowych; ja je pomijam), je tylko do sesji.Alan B. edytował(a) ten post dnia 06.07.08 o godzinie 22:47
Krzysztof P.

Krzysztof P. Programista, Team
Leader

Temat: Funkcja "zapamiętaj mnie podczas logowania".

@Alan
Nie do końca zrozumiałeś o jaki mi problem chodzi. A chodzi o osoby które się zalogowały (normalnie), tworzysz wpis w bazie, no i pytanie kiedy go usuwasz? Jak ktoś kliknie wyloguj to oczywiste, ale jak nie kliknie, tylko zamknie przeglądarkę? Co prawda pilnując aby jeden użytkownik miał tylko jedną aktywną sesje, zmniejsza się liczba wpisów, ale nadal nie wiadomo kiedy usunąć dane. Oczywiście można zostawiać, i wtedy nawet po roku jak ktoś nie zamykał przeglądarki ma aktywną sesję, ale też co bardziej bezpieczne (moim zdaniem, choć czasem irytujące) usuwać po jakimś czasie nie aktywności.
Alan Gabriel B.

Alan Gabriel B. Software Engineer,
IFX

Temat: Funkcja "zapamiętaj mnie podczas logowania".

Nie wiem o co Tobie chodzi Michale, jak się osoba zaloguje normalnie żadnego wpisu nie robimy. Stan zalogowania jet w sesji.
Tylko przy "zapamiętaj mnie" tak robimy i kojarzymy hash z ciastka z hashem, hmmm, dajmy na to w bazie (a w tabeli mamy hash i datę wygaśnięcia ciastka i id usera). Wpis kasujemy garbage-collectorem, który np. raz dziennie przechodzi po tej tabeli i kasuje wpisy, których czas wygaśnięcia ciastka mniejszy od dzisiejszej daty.Alan B. edytował(a) ten post dnia 06.07.08 o godzinie 22:53
Krzysztof P.

Krzysztof P. Programista, Team
Leader

Temat: Funkcja "zapamiętaj mnie podczas logowania".

A już wiem czego nie rozumiesz, bo ja zakładam że sesja niezależnie czy ktoś się zalogował z opcją automatycznego logowania czy nie, jest przechowywane w bazie. Tak aby nie rozrzucać sobie takich samych informacji w x miejscach.
A myślisz że jak jest czyszczona normalna sesja? Bo przecież co jakiś czas musi być, no i o ten czas mi chodziło, co prawda można korzystać z standardowych 15min nie aktywności, ale czy to najlepsze rozwiązanie?
Alan Gabriel B.

Alan Gabriel B. Software Engineer,
IFX

Temat: Funkcja "zapamiętaj mnie podczas logowania".

A widzisz, dla mnie sesja to sesja - to gdzie zapisuje jest dla mnie nieważne, zazwyczaj transparentne dla aplikacji.
Ale jeżeli sie pytasz... przedłuż do godziny, albo nawet dwóch - innej opcji nie widzę, skoro przeglądarka nie wysyła informacji o zakończeniu sesji.

I faktycznie zauważyłem też Twoje inne podejście do tematu. Bardzo ściśle łączysz sesję z użytkownikiem, a nie powinieneś. Przeanalizuj jeszcze raz schemat krokowy który podałem wyżej. Sesja nie służy do trzymania danych, raczej do Ich dublowania i trzymania Tych nadmiarowych, potrzebnych tylko dla danej sesji (najwydajniej to wygląda przy standardowym handlerze sesje, tym plikowym)Alan B. edytował(a) ten post dnia 06.07.08 o godzinie 23:35
Krzysztof P.

Krzysztof P. Programista, Team
Leader

Temat: Funkcja "zapamiętaj mnie podczas logowania".

@Alan
Wiesz u mnie sesja właściwie przechowuje jedną informację, user_id. Oczywiście są dane potrzebne pomiędzy przeładowaniami strony, ale te są nie dublowane, ale też nic się nie stanie jak znikną.
Co do dublowania, to nie widzę sensu jeśli trzyma się sesje w bazie, jedynie co jest uzasadnione to dane które trzeba obliczać, a często się z nich korzysta (np. prawa dostępu), ale odpowiednie zoptymalizowanie też da się zrobić na poziomie bazy.
Alan Gabriel B.

Alan Gabriel B. Software Engineer,
IFX

Temat: Funkcja "zapamiętaj mnie podczas logowania".

@Michale, czyli mamy zupełnie inne podejście do tej sprawy.

Nigdy nie zrozumiem, po co trzymać dane sesyjne w bazie (no, może SQLite, ale też sceptycznie), prędzej pisałbym handlera, żeby trzymać je gdzieś w pamięci, by przyśpieszyć wszelkie operacje na sesji.
Krzysztof P.

Krzysztof P. Programista, Team
Leader

Temat: Funkcja "zapamiętaj mnie podczas logowania".

Jakby te operacje stanowiły jakiś warty ułamek wydajności.
Michał Ławicki

Michał Ławicki dostawca zadowolenia

Temat: Funkcja "zapamiętaj mnie podczas logowania".

Alan B.:
Nigdy nie zrozumiem, po co trzymać dane sesyjne w bazie

żeby było bezpieczniej?
Alan Gabriel B.

Alan Gabriel B. Software Engineer,
IFX

Temat: Funkcja "zapamiętaj mnie podczas logowania".

Michał `Bełdzio` Ławicki:
żeby było bezpieczniej?

No faktycznie, bo e-złodzieje najpierw próbują sie dobrać do plików sesji na serwie, a dopiero potem do bazy... faktAlan B. edytował(a) ten post dnia 08.07.08 o godzinie 09:21
Michał Ławicki

Michał Ławicki dostawca zadowolenia

Temat: Funkcja "zapamiętaj mnie podczas logowania".

Alan B.:
No faktycznie, bo e-złodzieje najpierw próbują sie dobrać do plików sesji na serwie, a dopiero potem do bazy... faktAlan B. edytował(a) ten post dnia 08.07.08 o godzinie 09:21

jakby nie patrzeć wszelkiego typu HTML Injection są częstrzymi błędami niż SQLi
Wojciech Sznapka

Wojciech Sznapka CTO @ STS Zakłady
Bukmacherskie

Temat: Funkcja "zapamiętaj mnie podczas logowania".

Alan B.:
Michał `Bełdzio` Ławicki:
żeby było bezpieczniej?

No faktycznie, bo e-złodzieje najpierw próbują sie dobrać do plików sesji na serwie, a dopiero potem do bazy... faktAlan B. edytował(a) ten post dnia 08.07.08 o godzinie 09:21

bo jak włamujesz się na serwer (masz roota), to już tam jesteś i już masz sesje, a jak kolejnym krokiem jest włamanie się do bazy (chyba, że wystawisz se ją na świat)



Wyślij zaproszenie do