Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Logowanie - sesje czy cookie, Bezpieczeństwo
Gitrix
post 26.08.2016, 10:28:59
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 17.10.2014

Ostrzeżenie: (10%)
X----


Zacząłem ostatnio uzupełniać swoją wiedzę z PHP i mam mętlik w głowie. Zrobiłem sobie prosty system logowania oparty na cookies, jednak teraz dowiaduje się, że bezpieczniej jest robić logowanie na sesjach, gdyż podobno użytkownik może ciasteczka tworzyć sam oraz je edytować (https://www.youtube.com/watch?v=bW64jbnGYHw). Niejednokrotnie widzę na stronach internetowych napis, że ich witryna używa cookies, a po usunięciu ciasteczek z przeglądarki, następuje wylogowanie mnie. To jak to z tym wreszcie jest? Cookies czy sesje?
Go to the top of the page
+Quote Post
kapslokk
post 26.08.2016, 10:31:00
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Zeby sesja zadzialala musisz zapisac gdzies jej ID - albo bedziesz je przekazywal w URL'u, albo zapiszesz w ciastku. Na podstawie tego ID identyfikujesz sesje uzytkownika.

Ten post edytował kapslokk 26.08.2016, 10:31:25
Go to the top of the page
+Quote Post
Gitrix
post 26.08.2016, 10:35:15
Post #3





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 17.10.2014

Ostrzeżenie: (10%)
X----


Ale co jest bezpieczniejsze - logowanie na ciasteczkach czy bardziej w sesje?
Go to the top of the page
+Quote Post
kapslokk
post 26.08.2016, 10:36:40
Post #4





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Sesje - dane sesji sa trzymane na serwerze, a ciastka na komputerze uzytkownika - uzytkownik nie zmieni sam danych sesji, a ciastko tak.
Go to the top of the page
+Quote Post
Gitrix
post 26.08.2016, 10:40:06
Post #5





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 17.10.2014

Ostrzeżenie: (10%)
X----


Dzięki za odpowiedź. O to mi chodziło.
Go to the top of the page
+Quote Post
Damonsson
post 26.08.2016, 11:04:15
Post #6





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Chyba nie do końca załapałeś. Więc dodam swoje trzy grosze.

Jeśli chcesz używać sesji to musisz też używać cookie, które będzie przechowywało id sesji. Sesja nie będzie działać bez cookie*.

*Oczywiście zamiast cookie, możesz przekazywać id sesji w URLu, czy trzymać go w local.storage czy jeszcze możesz wymyślić jakiś dziwny sposób. Ale id sesji trzyma się w cookie, to jest naturalne i bezpieczne.

Ty po swojej stronie serwera, musisz przechowywać id sesji i użytkownik po swojej też musi go przechowywać, inaczej nie będziecie wzajemnie wiedzieli o sobie. W cookie użytkownika jest tylko id tej sesji, nic więcej.

Mając sesje, masz je przypisane do odpowiedniego użytkownika i możesz utrzymywać np. jego status zalogowania, czy sprawdzać czy to admin. Ale to wszystko robisz po stronie serwera, czyli użytkownik nie ma na to wpływu.

Natomiast kiedy zrezygnowałbyś całkowicie z sesji, to w ciasteczku musiałbyś umieścić np takie informacje jak "czyAdmin=nie" i teraz każdy mógłby sobie to ciasteczko edytować i podmienić wartość na "czyAdmin=tak" i voila miałby dostęp np do panelu admina. Przy używaniu sesji, jedyne co użytkownik może zmienić to jego id sesji w ciasteczku, ale nic mu to nie da, bo nie zna id sesji admina, więc po prostu zostanie wylogowany, bo nie zostanie znaleziony taki id sesji na jaki on zmienił.

Ten post edytował Damonsson 26.08.2016, 11:04:55
Go to the top of the page
+Quote Post
daro0
post 26.08.2016, 11:58:46
Post #7





Grupa: Zarejestrowani
Postów: 88
Pomógł: 12
Dołączył: 17.09.2014
Skąd: Krasnystaw

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


Tyle że sesje można trzymać także w ciasteczkach. Tzn. trzyma się tam w jakimś ciasteczku o nazwie dajmy na to session_cookie wszystkie zserializowane dane i jeszcze zaszyfrowane dajmy na to albo base64encode (no ale to łatwo odszyfrować a nawet zidentyfikować) albo pewnie bcryptem czy czymś takim. Tego typu sesje nie mają swojego unikalnego ID. Nie wiem ile frameworków to oferuje ale Kohana to na pewno. Przekazywanie session id przez URL wiąże się z niebezpieczeństwem ataków typu Session Fixation, Session Poisoning, Session Hijacking.

Standardowe logowanie opiera się na sesjach, natomiast opcja zapamiętaj mnie przez dajmy na to miesiąc na odpowiednich dodatkowych tabelach i wpisach w bazie danych użytkowników ale to też stwarza pewne niebezpieczeństwa, o czym się kiedyś przekonałem na własnej skórze :-) Zwłaszcza jeśli się logowaliście na innym laptopie z tą opcją i ktoś inny może Wam łatwo dodać wpisy na Facebooku, których sobie nie życzycie :-)
Go to the top of the page
+Quote Post
viking
post 26.08.2016, 12:07:25
Post #8





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


Są też biblioteki które zwiększają bezpieczeństwo sesji wbudowanej np https://github.com/ezimuel/PHP-Secure-Session


--------------------
Go to the top of the page
+Quote Post
daro0
post 26.08.2016, 12:50:12
Post #9





Grupa: Zarejestrowani
Postów: 88
Pomógł: 12
Dołączył: 17.09.2014
Skąd: Krasnystaw

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


Ogólnie to i tak najlepiej robić takie rzeczy na frameworkach. Cookie można też fajnie zabezpieczyć przed modyfikacją ręczną, taka modyfikacja później zakończy się tym, że ciasteczko nie zostanie po prostu odczytane i takie logowanie się po prostu nie uda, podaję przykład w Kohanie, choć w innych frameworkach może być też coś na wzór tego:

https://kohanaframework.org/3.3/guide-api/Cookie

Tego typu zabezpieczenie jest realizowane przez hashowanie pewnych danych i jeszcze z użyciem soli (bez tego można łatwo sobie poradzić bazując chociażby na kodzie wyżej), użycie tego przy zapisie a potem sprawdzanie czy się zgadza przy odczycie, możecie przeanalizować ten kod.
Go to the top of the page
+Quote Post
Comandeer
post 26.08.2016, 15:16:22
Post #10





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


To może ja rzucę: JWT wink.gif

Cytat
jeszcze zaszyfrowane dajmy na to albo base64encode (no ale to łatwo odszyfrować a nawet zidentyfikować) albo pewnie bcryptem czy czymś takim.

bcryptem to raczej średnio zaszyfrowane, zważając na fakt, że to algorytm hashujący. Owszem, ciastko będzie bezpieczne. Na tyle, że nawet Ty nie odczytasz zawartych w nim danych wink.gif


--------------------
Go to the top of the page
+Quote Post
daro0
post 26.08.2016, 15:52:54
Post #11





Grupa: Zarejestrowani
Postów: 88
Pomógł: 12
Dołączył: 17.09.2014
Skąd: Krasnystaw

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


Cytat(Comandeer @ 26.08.2016, 16:16:22 )
bcryptem to raczej średnio zaszyfrowane, zważając na fakt, że to algorytm hashujący. Owszem, ciastko będzie bezpieczne. Na tyle, że nawet Ty nie odczytasz zawartych w nim danych wink.gif


A no fakt, używane jest raczej to (sprawdzałem także w źródłach Kohany)
http://php.net/manual/en/function.mcrypt-encrypt.php
http://php.net/manual/en/function.mcrypt-decrypt.php

przy czym i tak z tego co zauważyłem, to po zaszyfrowaniu przez mcrypt_encrypt stosowane jest jeszcze po tej operacji base64encode i dopiero to jest zapisywane a przy operacji odczytu dzieje odwrotnie (base64decode a potem mcrypt_decrypt).

Ten post edytował daro0 26.08.2016, 15:53:31
Go to the top of the page
+Quote Post
lukaskolista
post 27.08.2016, 10:25:12
Post #12





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

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


Ustalmy kilka faktów:
- base64 encode i decode nie ma nic wspólnego z bezpieczeństwem
- wrażliwych danych nie trzyma się w cookie nawet "zaszyfrowanych"
- kohana 3 to prehistoria

Cytat
Przekazywanie session id przez URL wiąże się z niebezpieczeństwem ataków typu Session Fixation, Session Poisoning, Session Hijacking.

A trzymanie zserializowanych danych w ciasku to niby nie...

Natura cookie jest taka, że trzymasz w nim pary klucz=>wartość w typach prostych. Skoro chcesz do typu prostego wpakować typ złożony, to chociaż powinna Ci się zapalić czerwona lampka.

Nie wypisujcie proszę takich bzdur tutaj, bo ktoś to kiedyś przeczyta i weźmie sobie za fachowe źródło.

Cytat
Standardowe logowanie opiera się na sesjach, natomiast opcja zapamiętaj mnie przez dajmy na to miesiąc na odpowiednich dodatkowych tabelach i wpisach w bazie danych użytkowników ale to też stwarza pewne niebezpieczeństwa, o czym się kiedyś przekonałem na własnej skórze :-) Zwłaszcza jeśli się logowaliście na innym laptopie z tą opcją i ktoś inny może Wam łatwo dodać wpisy na Facebooku, których sobie nie życzycie :-)

Że co?
Go to the top of the page
+Quote Post
em1X
post 27.08.2016, 12:11:02
Post #13





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


Zainteresujcie się JWT. Cała sesja przechowywana jest w ciasteczku, jest to dużo szybszy sposób komunikacji i eliminuje problem, np. podczas skalowania horyzontalnego serwisu, w porównaniu do danych trzymanych na dysku serwera, co jest wolniejsze.

Założenia do JWT:

- ciastka powinny mieć maks 0,5kb
- w ciastkach nie przechowujemy drażliwych danych, np. haseł itp.
- pilnujemy klucza prywatnego na serwerze i nie upubliczniamy go (oczywiście)


--------------------
eh, co polska wódka to polska wódka
Go to the top of the page
+Quote Post
Comandeer
post 27.08.2016, 13:46:57
Post #14





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


Niekoniecznie przy JWT sesja siedzi w ciastku. Często JWT są przekazywane jako nagłówek HTTP.


--------------------
Go to the top of the page
+Quote Post
em1X
post 27.08.2016, 13:49:01
Post #15





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


A ciastko to jak jest przekazywane? wink.gif


--------------------
eh, co polska wódka to polska wódka
Go to the top of the page
+Quote Post
Comandeer
post 27.08.2016, 14:08:30
Post #16





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


Touché. Chodziło mi o dedykowany nagłówek Authorization.


--------------------
Go to the top of the page
+Quote Post
daro0
post 27.08.2016, 16:09:41
Post #17





Grupa: Zarejestrowani
Postów: 88
Pomógł: 12
Dołączył: 17.09.2014
Skąd: Krasnystaw

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


Cytat(lukaskolista @ 27.08.2016, 11:25:12 )
Ustalmy kilka faktów:
- base64 encode i decode nie ma nic wspólnego z bezpieczeństwem
- wrażliwych danych nie trzyma się w cookie nawet "zaszyfrowanych"
- kohana 3 to prehistoria


Zostawmy może KO3, dałem przykład (ze źródeł) tylko po to żeby łatwo każdy czytelnik mógł sobie przeanalizować kod i jak się realizuje taką ochronę przed ręczną modyfikacją ciasteczek. Tylko i wyłącznie.

Na ile łatwy do złamania jest Rijndael? No jest jeszcze kwestia tego co uważasz za wrażliwe dane, bo jeśli chodzi o logowanie to nawet session id, które jest trzymane w ciasteczku można by uznać za wrażliwe. Base64 to kodowanie transportowe, oczywiście że nie ma to nic wspólnego z bezpieczeństwem, bo można łatwo to zidentyfikować i równie łatwo rozkodować (nawet bez znajomości PHP bo są serwisy online). Ale jakoś trzeba te dane (nie prosty string) zapisać, bo jak sprawdzałem to na mcrypt to mi wychodziły jakieś krzaczki ale i bez tego jest to też stosowane. W tym sensie z założenia żeby była tylko możliwość a nie koniecznie że jest zalecane czy nie zalecane składowanie złożonych danych.

Cytat
A trzymanie zserializowanych danych w ciasku to niby nie...


Odnosząc się do tego co wyżej:

1. Jak łatwo rozszyfrować Rijndael i ile to zajmie czasu?
2. Skoro jest używany hash (np. SHA1) do kontroli oraz sól (której haker nie zna) a jest zapisana gdzieś w tym przypadku w Kohanie w bootstrap.php w postaci (przykładowa wartość):

  1. Cookie::$salt = 'yhpyRbFPj9PPj6Fb'


oczywiście na serwerze, gdzie nie ma (no chyba że się włamie) dostępu do kodu, to nawet jeśli spróbuje zmodyfikować ciasteczko, to FW tego nie przyjmie. Przynajmniej częściowa ochrona.

Napisałem tylko że istnieje możliwość przetrzymywania sesji w Cookie, KO3 oraz pewnie inne frameworki mają do tego swoje klasy do obsługi tego typu sesji. Jakich więc wrażliwych danych nie należy przetrzymywać w cookie?

A w dalszej części wypowiedzi chodziło mi o to, że łatwo można się przejechać logując się w serwisie zaznaczając przez nieuwagę albo bo tak jest wygodniej checkbox "zapamiętaj mnie", na jakimś innym laptopie. Wydaje mi się że w dużej mierze problem z bezpieczeństwem to nie tylko kwestie techniczne ale i zwykłe naturalne (albo rutynowe) zachowania użytkowników o których hakerzy doskonale wiedzą.

Ten post edytował daro0 27.08.2016, 16:13:51
Go to the top of the page
+Quote Post
Pyton_000
post 27.08.2016, 21:06:08
Post #18





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Co do zapamiętaj mnie to za każdym razem musi być sprawdzanie danych. Więc jeśli gdzieś indziej się zalogujemy to automatem poprzednie "zaloguj mnie" idzie do piachu.
Go to the top of the page
+Quote Post
szajens
post 27.08.2016, 22:12:07
Post #19





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

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


daro0 - ćpiesz? Co ty w ogóle za tezy wymyślasz.

wydaje mi się że Damonsson wyjaśnił to łopatologicznie
Go to the top of the page
+Quote Post
lukaskolista
post 28.08.2016, 18:22:20
Post #20





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

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


daro0 - widzę, że nie ogarniasz podstaw bezpieczeństwa. Co z tego, że rijandel, że trudny do złamania? Na prawdę to jest Twój argument?

Właśnie nam powiedziałeś, jakiego algorytmu szyfrującego użyjesz w swojej "bezpiecznej" sesji. Znając algorytm jestem w stanie wstrzyknąć w sesję cokolwiek łącznie z tym, na jakiego usera jestem zalogowany. Prędzej czy później rozgryzę strukturę Twojego ciasteczka chociażby pisząc prosty skrypt generujący różne warianty struktur danych zawierających login/id usera a wtedy...

W ciastku to sobie możesz trzymać informację o tym, czy user zaakceptował politykę cookie + id jego sesji, która po każdym zapytaniu powinno być przegenerowane.

Pomijam już możliwość popełnienia błędu i braku szyfrowania zawartości ciastka w jakimś określonym przypadku.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 15.06.2025 - 10:01