Kamil Kłosowski

Kamil Kłosowski webdeveloper
limegarden.pl

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

Hej

Przejrzałem kilka tematów w tej grupie, jednak w żadnym nie odnalazłem tego wątku.

Kwestie techniczne tej funkcji każdy dowolnie może rozwiązać, ja wybrałem tworzenie unikalnego hasha po stronie klienta oraz bazy - w bazie oprócz hash jest też id usera oraz czas aktualizacji pola. W trakcie autoryzacji użytkownika system sprawdza poprawność kilku danych w sesji - jeśli nie zgadzają się wylogowuje użytkownika chyba, że ma aktywne ciastko autologowania - jeśli ma, porównuje hashe w bazie z hashem w ciastku, jeśli się zgadzają to RESETUJE hash w ciastku oraz updejtuje hash w bazie dodatkowo resetując sesję.

Tu pojawia się problem - jeśli gość zaloguje się na innym komputerze i wykorzysta funkcję remember me, system przypisze mu ciastko i zupdejtuje hash w bazie - to na pierwszym komputerze ciastko nie będzie zgadzało się z tym w bazie i go nie zaloguje.

Serwis taki jak facebook - jednak oferuje możliwość autologowania na wielu komputerach. Jak to wygląda w kwestii bezpieczeństwa? Można tworzyć niezliczone ilości hashy przypisanych do jednego usera - i ok, ale w takim razie wykradnięcie jednego z ciastek zawierającego taki hash pozwoli na zalogowanie się na dowolnym komputerze na świecie.

Opcja z dodatkową weryfikacją przez IP nie jest dobrym rozwiązaniem, użytkownicy tp oraz korzystający z mobilnego netu nie będą mogli skorzystać z tej funkcji - bo co chwile będą mieli logout.

Może fingerprint? Ktoś to ogarniał?

Z góry dzięki za propozycje i sugestie

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

zawsze możesz dodatkowo zapisać w bazie md5($_SERVER["HTTP_USER_AGENT"])
przy każdorazowym logowaniu przez ciacho zmieniaj id klucza w ciastku
jeśli się boisz wykradnięcia ciastka gdzieś po drodze to zastosuj ssl
Kamil Kłosowski

Kamil Kłosowski webdeveloper
limegarden.pl

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

user agent jest jakimś rozwiązaniem - ale z drugiej strony każda aktualizacja (chrome ma co 2-3 tygodnie) zmieni ten wpis.

ssl nie wchodzi w gre - narazie wychodzę z założenia że ktoś może mi to ciastko wykraść - chcę tylko sprawić, żeby z tym ciastkiem nic nie mógł zrobić.

konto usunięte

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

Ja realizowałem taką opcję dając użytkownikowi 3 warianty do wyboru gdzie drugi jest domyślny.

1. Zerowa kontrola, użytkownik jest tutaj sam za siebie odpowiedzialny (niezalecane). Wystarczy prosta autoryzacja za pomocą cookie.

2. Dane użytkownika są zapamiętywane (user-agent itp) + dane które mogę uzyskać z javascript (pobrane przy zalogowaniu). Z nich sobie liczę tzw poziom zaufania. Jeżeli dane różnią się nieznacznie przy próbie wznowienia sesji to autoryzacja przechodzi, jeżeli zmiany są podejrzane to klapa (zalecane).

3. Ostatnia opcja (hardcore ?) jest uzupełnieniem części drugiej. Dodatkowo sprawdzane jest IP użytkownika. To jest tak czy siak kontrolowane gdy korzysta ze strony (w końcu raczej mu się ono nie zmieni między jedną odsłoną a drugą za kilkanaście sekund). Po prostu przy wznowieniu sesji wymagane jest takie samo IP + odpowiedni poziom zaufania.

+ do tego standardowo cookie. W momencie gdy użytkownikowi ktoś je podkradnie, dużo nie narobi. Proste i skuteczne. Kwestia czy adekwatne do projektu.

//EDIT
Był bym zapomniał. Mój znajomy wsadza na stronę 1-pixelowy flash i jego używa do dodatkowej autoryzacji użytkownika robiąc niemalże tzw "odcisk palca" jego komputera. Dariusz Półtorak edytował(a) ten post dnia 17.03.11 o godzinie 12:24

konto usunięte

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

Kamil Kłosowski:
(ciach)
Tu pojawia się problem - jeśli gość zaloguje się na innym komputerze i wykorzysta funkcję remember me, system przypisze mu ciastko i zupdejtuje hash w bazie - to na pierwszym komputerze ciastko nie będzie zgadzało się z tym w bazie i go nie zaloguje.

No i o to chyba w tym mechaniźmie chodzi.
"Remember me" powinno działać tylko na kompie / IP / przeglądarce na której mamy zapamiętane ciastko.

Inaczej możliwy jest atak z innego kompa / profilu użytkownika na tym samym kompie.

Co do IP to jest to śliskie z tego względu, że użytkownik może łączyć się modemem z dynamicznym IP.

Co do FB to pewnie do każdego kompa jest osobna para użytkownik / ciacho (kilka równocześnie aktywnych).Piotr Likus edytował(a) ten post dnia 17.03.11 o godzinie 15:31
Kamil Kłosowski

Kamil Kłosowski webdeveloper
limegarden.pl

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

Piotr Likus:
Kamil Kłosowski:
(ciach)
Tu pojawia się problem - jeśli gość zaloguje się na innym komputerze i wykorzysta funkcję remember me, system przypisze mu ciastko i zupdejtuje hash w bazie - to na pierwszym komputerze ciastko nie będzie zgadzało się z tym w bazie i go nie zaloguje.

No i o to chyba w tym mechaniźmie chodzi.
"Remember me" powinno działać tylko na kompie / IP / przeglądarce na której mamy zapamiętane ciastko.

Inaczej możliwy jest atak z innego kompa / profilu użytkownika na tym samym kompie.

Co do IP to jest to śliskie z tego względu, że użytkownik może łączyć się modemem z dynamicznym IP.

Co do FB to pewnie do każdego kompa jest osobna para użytkownik / ciacho (kilka równocześnie aktywnych).

Wiem, że to tak działa i wiem, że trzeba podzielić to na kilka ciastek-hashbaza/każdy na innym kompie. Ale bez innego zabezpieczenia niż tylko ciastko-hashbaza można ciastko umieścić gdziekolwiek się chce - logując się na każdym komputerze w którym to ciastko istnieje. na fb tak jest - ale wielce prawdopodobnym wydaje się fakt, iż jeszcze jakoś to zabezpieczyli. pytanie - jak.

@Dariusz: jakie dane pobierasz? i na czym polega sprawdzanie poziomu zaufania? % pasujących danych czy znaków? co do ip to jest u mnie w autoryzacji samego użytkownika - oprócz ip jest jeszcze kilka danych - coś się nie zgadza - logout. ale jeśli miał autologowanie i wszystko ok to loguje ponownie.
a co do flash - na jakiej zasadzie to działa?Kamil Kłosowski edytował(a) ten post dnia 17.03.11 o godzinie 15:55

konto usunięte

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

Flashowcem nie jestem. Ze sposobu tego też nie korzystam więc Ci nie wyjaśnię.
Poziom zaufania to rzecz bardzo prosta. Zakładając że wyciągam od użytkownika łącznie 10 zmiennych, wymagam by xx% z nich się zgadzał z tym co wcześniej zostało zapisane przy użyciu opcji "zapamiętaj mnie".
Chodzi głównie o sytuację gdzie właśnie jakiś drobiazg się mógł bezboleśnie zmienić jak fragment user-agenta.

Jak wyciągać dane ? Wpierw można wykorzystać info przesłane z tabeli $_SERVER. Można się wspomóc Javascriptem (info o kliencie + rozdzielczość ekranu itp itd etc...), można wspomóc się bibliotekami google, flashem jak mój znajomy, użytkowników IE można spróbować katować ActiveX (choć nie polecam), masz obiekt navigator (http://webmaster.helion.pl/index.php/kursjs-wspolpraca... i sporo innych możliwości.
Nic tylko wybierasz.
Także robisz swoisty odcisk komputera. Pamiętaj tylko że takie rzeczy robi się przy logowaniu tylko. W trakcie przeglądania strony raczej wystarczy sprawdzać takie drobiazgi jak IP, user-agent i tyle.

PozdrawiamDariusz Półtorak edytował(a) ten post dnia 17.03.11 o godzinie 21:21
Michał Sznurawa

Michał Sznurawa Scala Developer

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

Trochę offtop zrobię;)
Krzysztof Korzeniewski:
jeśli się boisz wykradnięcia ciastka gdzieś po drodze to zastosuj ssl

Bez tego to chyba każdy system logowania się wywali w momencie, gdy uzer skorzysta z publicznej, niezabezpieczonej sieci wifi;)

Dariusz Półtorak:
Jak wyciągać dane ? Wpierw można wykorzystać info przesłane z tabeli $_SERVER. Można się wspomóc Javascriptem (info o kliencie + rozdzielczość ekranu itp itd etc...), można wspomóc się bibliotekami google, flashem jak mój znajomy, użytkowników IE można spróbować katować ActiveX (choć nie polecam), masz obiekt navigator

A czy przypadkiem nie musisz tego i tak przesłać do serwera? Czy to samych danych, czy hasha z nich.

konto usunięte

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

A jaki jest z tym problem ? Można zrobić sumę kontrolną po stronie klienta, tak samo jak można przesłać dane w oryginalnej formie. Poziom paranoi odnośnie zabezpieczeń powinien być adekwatny do potrzeb.
Chodzi głównie by zyskać jak najwięcej danych które są w stanie zidentyfikować użytkownika.

Metoda jest jasna i do tego częściej stosowana niż myślisz. Mój kolega wygłosił ostatnio teorię że gdyby zebrać wystarczającą ilość danych z dostępnych źródeł i odrobinę rzecz przetestować to można zrobić dosłownie taki "odcisk palca" komputera użytkownika.
W tym momencie właściwie nie musiał byś się w ogóle logować bo był bym Cie w stanie rozpoznać (zawsze z marginesem błędu ale minimalnym) a ciasteczko było by tylko takim upewnieniem się że to na pewno Ty. Przykład - jeżeli nie konfigurowałeś sobie nigdy flasha to zobacz sobie że ma on przechowaną historię przeglądania Twoich stron. Niezależnie od przeglądarki. Są też sposoby by tę historię dostać :-)

Rzecz jest znana i od dawna wykorzystywana. Zwłaszcza przez firmy reklamowe. Śledzenie użytkownika to dobra metoda dla przedsiębiorców. Jak widzą że odwiedzasz X stron o transporcie to się nie zdziw jak coraz częściej zaczną Ci się pojawiać na stronach reklamy firm które transportem się zajmują, reklamy samochodów towarowych itp (to tylko taki przykład).
Michał Sznurawa

Michał Sznurawa Scala Developer

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

Dariusz Półtorak:
A jaki jest z tym problem ? Można zrobić sumę kontrolną po stronie klienta, tak samo jak można przesłać dane w oryginalnej formie.

A taki, że adwersarz może te same dane łatwo uzyskać, podstawić po swojej stronie i podszyć się pod innego uzera.
Poziom paranoi odnośnie zabezpieczeń powinien być adekwatny do potrzeb.

Możesz sobie to nazywać paranoją;) W pewnym momencie do gry wchodzi kasa i zaufanie do przedsiębiorstwa.
Chodzi głównie by zyskać jak najwięcej danych które są w stanie zidentyfikować użytkownika.

Ale one nie są wiarygodne. Przejęcie ich wszystkich wcale nie jest takie trudne, podobnie jak podstawienie po swojej stronie.

Metoda jest jasna i do tego częściej stosowana niż myślisz. Mój kolega wygłosił ostatnio teorię że gdyby zebrać wystarczającą ilość danych z dostępnych źródeł i odrobinę rzecz przetestować to można zrobić dosłownie taki "odcisk palca" komputera użytkownika.

Nie on pierwszy -> https://panopticlick.eff.org/ http://niebezpiecznik.pl/post/internet-cie-sledzi-i-na...
Rzecz jest znana i od dawna wykorzystywana. Zwłaszcza przez firmy reklamowe. Śledzenie użytkownika to dobra metoda dla przedsiębiorców.
Rozmawialiśmy o ogólnie pojętym bezpiecznym logowaniu użytkowników a nie targetowaniu reklam.

A o co mi chodzi? Te wszystkie metody może i zapewniają dobre samopoczucie programiście, ale bezpieczeństwa już raczej nie bardzo. Ważne jest szyfrowanie danych;) I tyle. Możesz sobie to nazywać paranoją, ale tylko do czasu, jak będziesz miał odpowiednio popularną stronę lub przy pomocy przejętego konta można będzie narobić szkody lub samemu zarobić.

konto usunięte

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

Chyba się nie zrozumieliśmy. Szyfrowanie swoją drogą i chyba nie ma sensu tutaj tego mówić. Jak w ogóle chcesz się martwić kwestiami bezpieczeństwa, to powinna być to pierwsza rzecz, jaką robisz.
Zresztą zauważ, że wiele popularnych witryn nadal z niego nie korzysta.

Dane o których mówisz, można łatwo podstawić - to prawda. Ale trzeba wiedzieć jakie dane są zbierane, zlokalizować wszystkie źródła skąd pochodzą itp itd etc. Trzeba wiedzieć co i jak podstawić, a zauważ że jedna wpadka i taki mechanizm uwierzytelniania Cie odrzuci. Sam nigdy go nie robiłem na zasadzie prób i błędów. Jeżeli zmian w komputerze użytkownika było zbyt dużo w stosunku do poziomu zabezpieczeń jaki użytkownik sobie wybrał to po prostu dane ostatniej sesji były niszczone i trzeba się zalogować ponownie.

Mowa o szyfrowaniu nie ma sensu bo jak byś sobie choćby nie wiem jak zaszyfrował połączenie pomiędzy klientem a serwerem to i tak wystarczy żeby Ci ktoś podkradnie ciasteczko (a na to jest multum sposobów) i można sobie to szyfrowanie wsadzić głęboko gdzieś. Zaś metoda o której wspomniałem jest DODATKOWYM zabezpieczeniem.
Przemysław Pawliczuk

Przemysław Pawliczuk CEO/Designer @
h2p.pl, developer @
DreamCommerce SA

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

Mowa o szyfrowaniu nie ma sensu bo jak byś sobie choćby nie wiem jak zaszyfrował połączenie pomiędzy klientem a serwerem to i tak wystarczy żeby Ci ktoś podkradnie ciasteczko (a na to jest multum sposobów) i można sobie to szyfrowanie wsadzić głęboko gdzieś. Zaś metoda o której wspomniałem jest DODATKOWYM zabezpieczeniem.

Zależy, jakie szyfrowanie masz na myśli. Jeśli SSL, to ok - jak najbardziej - odpada większość ataków man-in-the-middle.

Ale jeśli chodzi o zawartość... Nie ma sensu. ;)

konto usunięte

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

Kamil Kłosowski:

nie wystarczy jeden hash ? moim zdaniem wystarczy, jeśli jest hash => to wykorzystaj istniejący hash

zasadniczo jeśli spojrzysz na to jakie hasła użytkownicy Tworzą, to długość hasha np 32 znaki powinna być wystarczająca (i tak go nigdzie nie prezentujesz)

i jw. Tworzenie hasha dla każdej lokalizacji (komputera/przeglądarki) mija się z celem IMHO

można ewentualnie założyć, że co jakiś czas zmieniasz hash i robisz to np. przy zmianie hasła itd.

//

kwestie bezpieczeństwa .. wprost proporcjonalne do długości hasha (Twoja odpowiedzialność) i miejsca gdzie go zostawiasz (odpowiedzialność użytkownika)

jeśli chcesz zwiększyć poziom bezpieczeństwa to możesz robić tak jak np. Linkedin .. pewne rzeczy wymagaja podania hasła (ale jeden raz na sesje lub pewien okres czasu), czyli sesja ma 2 poziomy bezpieczeństwa ... pierwszy read-only (jeśli autologin) i drugi - kiedy hasło zostało zweryfikowane writeable

pozdrTomasz Grzechowski edytował(a) ten post dnia 22.03.11 o godzinie 14:26
Kamil Kłosowski

Kamil Kłosowski webdeveloper
limegarden.pl

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

Używam jednego hasha. Jednak ze względów bezpieczeństwa resetuję go po każdym auto-loginie bądź zwykłym zalogowaniu (jeśli potwierdził "zapamiętaj mnie").
Na kolejnym komputerze musi stworzyć nowego hasha do ciasteczka - który nie będzie zgadzał się z hashem z bazy. Tak więc jedyną możliwością jest tworzenie połączenia hash->ciastko , ale w takim razie wykradnięcie ciastka spowoduje, że osoba będzie mogła się w dowolnym miejscu zalogować - tak więć potrzebny byłby fingerprint.

Swoją drogą zaczynam się zastanawiać czy aż taki poziom bezpieczeństwa to nie przesada?

konto usunięte

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

no moim zdaniem resetowanie hasha co zalogowanie mija sie z sensem .. przeciez, moge miec taki autologin na komputerze w pracy i np. w domu .. gdybym codziennie logowal sie z 1 i 2 lokalizacji, to by mi hash odpowiednio tu lub tu nie dzialal .. no chyba ze tworzysz kilka i okreslasz im np. waznosc

ale to IMHO niewiele zmienia, przerost formy nad trescia .. nie ma znaczenia skad uzytkownikowi zostanie skradziony hash .. wazne ze moze zostac wykorzystany

jesli chcesz zwiekszyc bezpieczenstwo zrob 2 poziomy sesji jak na linked in .. R/O i R/W (po zweryfikowaniu hasla)

pozdr
Kamil Kłosowski

Kamil Kłosowski webdeveloper
limegarden.pl

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

Tomasz Grzechowski:
Kamil Kłosowski:

nie wystarczy jeden hash ? moim zdaniem wystarczy, jeśli jest hash => to wykorzystaj istniejący hash

zasadniczo jeśli spojrzysz na to jakie hasła użytkownicy Tworzą, to długość hasha np 32 znaki powinna być wystarczająca (i tak go nigdzie nie prezentujesz)

i jw. Tworzenie hasha dla każdej lokalizacji (komputera/przeglądarki) mija się z celem IMHO

można ewentualnie założyć, że co jakiś czas zmieniasz hash i robisz to np. przy zmianie hasła itd.

//

kwestie bezpieczeństwa .. wprost proporcjonalne do długości hasha (Twoja odpowiedzialność) i miejsca gdzie go zostawiasz (odpowiedzialność użytkownika)

jeśli chcesz zwiększyć poziom bezpieczeństwa to możesz robić tak jak np. Linkedin .. pewne rzeczy wymagaja podania hasła (ale jeden raz na sesje lub pewien okres czasu), czyli sesja ma 2 poziomy bezpieczeństwa ... pierwszy read-only (jeśli autologin) i drugi - kiedy hasło zostało zweryfikowane writeable

pozdrTomasz Grzechowski edytował(a) ten post dnia 22.03.11 o godzinie 14:26

widzisz - jeżeli więc co jakiś czas zmienisz hash, spowodujesz, że zresetujesz na wszystkich innych kompach auto-login.

z drugiej strony przerost formy nad treścią - nie potrzebuję tak naprawdę zabezpieczać danych, więc r/o i writeable mijało by się z celem.

chyba przychylam się do kwestii - niezmienialny hash, raz ustawiony w bazie - ciastko w kompie w zależności od upodobań usera (czy ma zapamiętywać czy nie - odznaczenie tego w panelu usera wykasuje tylko ciastko).

konto usunięte

Temat: Funkcja "Zapamiętaj mnie" - kwestie bezpieczeństwa

Kamil Kłosowski:
widzisz - jeżeli więc co jakiś czas zmienisz hash, spowodujesz, że zresetujesz na wszystkich innych kompach auto-login.

z drugiej strony przerost formy nad treścią - nie potrzebuję tak naprawdę zabezpieczać danych, więc r/o i writeable mijało by się z celem.

chyba przychylam się do kwestii - niezmienialny hash, raz ustawiony w bazie - ciastko w kompie w zależności od upodobań usera (czy ma zapamiętywać czy nie - odznaczenie tego w panelu usera wykasuje tylko ciastko).

do zmiany hasła powinieneś wymagać podania starego hasła i moim zdaniem możesz zmieniać wtedy hash

fakt, że na innych kompach użytkownik będzie musiał się przelogować jest IMHO w tej sytuacji zamierzony

:-)

przykład : stracony laptop



Wyślij zaproszenie do