Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wylogowanie Uzytkownik ze wzgledu na ilosc sesji
mikowski
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 7.03.2007

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


Witam,
troche sie zblokowalem. Mam nastepujacy przypadek uzycia :
- user loguje sie na strone z kompa 1 (ustawiamy sesje i cookie etc.)
- ten sam user dokonuje proby zalogowania na strone tyle ze z kompa 2

Jak wykryc taki przypadek i wygasic sesje (wylogowac) tego usera z strony otwartej na kompie 1 i pozostawic sesje na kompie 2 ?

Pozdrawiam
Go to the top of the page
+Quote Post
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Session handler który zapisuje sesje do bazy. Dodajesz do niego dodatkowe pole "login" W ktory,m trzymasz id badz login zalogowanego na ta sesje uzytkownika. Przy probie zalogowania z innego kompa usuwasz pierwsza sesje z tym samym loginem i voila.


--------------------
Go to the top of the page
+Quote Post
pyro
post
Post #3





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Albo prościej -> stworzyć dodatkową kolumnę `logged_ip` i przy logowaniu zapisawać do niej IP użytkownika -> $_SERVER['REMOTE_ADDR'];

i teraz w skrypcie:

  1. <?php
  2. // zakładajac, że $logged_ip to kolumna pobrana z bazy z ostatnim IP zalogowanego usera
  3. if($logged_ip != $_SERVER['REMOTE_ADDR'])
  4. {
  5. // wylogowanie
  6. }
  7. ?>


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Przecież drugi komputer może mieć inne ip.


--------------------
Go to the top of the page
+Quote Post
pyro
post
Post #5





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


@wookieb, nie wiem czy my się dobrze zrozumieliśmy, ale mój przykład właśnie ilutruje taki przypadek smile.gif


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
wookieb
post
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Racja przepraszam sad.gif Ale teraz to stwarza problem jeżeli 2 kompy są w jednej sieci biggrin.gif i reprezentowane są przez to samo ip smile.gif


--------------------
Go to the top of the page
+Quote Post
pyro
post
Post #7





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Myślę, że podświadomie autorowi tematu chodziło o sytuację, gdzie są dwie oddzielne sieci, ale tego nie wiem. Ma dwa rozwiązania, które w zupełności wystarczy, niech sobie wybierze winksmiley.jpg

// ADD

Jeszcze jedna możliwość: dodatkowa kolumna z PHPSESSID i porównywanie go analogicznie jak z moim ostatnim przykładem


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
batman
post
Post #8





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Cytat(wookieb @ 26.05.2009, 09:50:19 ) *
Racja przepraszam sad.gif Ale teraz to stwarza problem jeżeli 2 kompy są w jednej sieci biggrin.gif i reprezentowane są przez to samo ip smile.gif

Da się wyciągnąć ip komputera, a nie sieci. Ja się nie spotkałem z sytuacją, w której dwie różne osoby miały ten sam IP na dwóch różnych komputerach w tym samym czasie.
Poszukaj w necie informacji o nagłówkach:
FORWARDED
FORWARDED_FOR
FORWARDED_FOR_IP
HTTP_FORWARDED
HTTP_FORWARDED_FOR
HTTP_FORWARDED_FOR_IP
X_FORWARDED
X_FORWARDED_FOR
HTTP_X_FORWARDED
HTTP_X_FORWARDED_FOR
CLIENT_IP
HTTP_CLIENT_IP
VIA
HTTP_VIA
HTTP_PROXY_CONNECTION

Któryś z nich będzie zawierał właściwe IP.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
pyro
post
Post #9





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


@batman, osobiście jestem za NAT'em. Mam 3 komputery i jak zamierzasz wyciągnąć IP mojego komputera z tej sieci winksmiley.jpg? Nie ma zbytnio możliwości... widoczne będzie tylko IP sieci.


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
batman
post
Post #10





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Jak już pisałem, nie spotkałem się z taką sytuacją, by nie można było wyciągnąć konkretnego IP. Nie mam teraz jak tego udowodnić, więc nie będę się upierał.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
wookieb
post
Post #11





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Pamiętam o tych zmiennych ale chociażby takie X_FORWARDED_FOR nie jest dostępne domyślnie (o ile dobrze pamiętam) i o takie coś trzeba prosić administratora serwera. Poprawcie mnie jeżeli się mylę.

Nie jestem pewien, czy wyciągnie to adresy ip za NAT-em ale jeżeli tak to nadal sprawia to możliwość posiadania tych samych ip. Login jest o tyle unikalny, że nie zależy od komputera dlatego jest najbardziej uniwersalny.

//EDIT Tak jak myślałem, nie wszędzie to działa.
http://wookieb.pl/test_ip.php
  1. <?php
  2. $keys=array('FORWARDED',
  3. 'FORWARDED_FOR',
  4. 'FORWARDED_FOR_IP',
  5. 'HTTP_FORWARDED',
  6. 'HTTP_FORWARDED_FOR',
  7. 'HTTP_FORWARDED_FOR_IP',
  8. 'X_FORWARDED',
  9. 'X_FORWARDED_FOR',
  10. 'HTTP_X_FORWARDED',
  11. 'HTTP_X_FORWARDED_FOR',
  12. 'CLIENT_IP',
  13. 'HTTP_CLIENT_IP',
  14. 'VIA',
  15. 'HTTP_VIA',
  16. 'HTTP_PROXY_CONNECTION');
  17.  
  18.  
  19. foreach($keys as $key)
  20. {    
  21.    if(isset($_SERVER[$key]))
  22.    {
  23.        echo $key.': '.$_SERVER[$key].'<br/>';
  24.    }
  25.    else echo '$_SERVER[''.$key.''] = brak<br/>';
  26.    
  27.    if(isset($_ENV[$key]))
  28.    {
  29.        echo $key.': '.$_ENV[$key].'<br/>';
  30.    }
  31.    else echo '$_ENV[''.$key.''] = brak<br/>';
  32. }
  33. ?>


//EDIT Argument ZYX'a mówi wszystko

Ten post edytował wookieb 26.05.2009, 09:32:34


--------------------
Go to the top of the page
+Quote Post
zegarek84
post
Post #12





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Zawsze można dorzucić jeszcze jeden warunek – USERAGENT przeglądarki internetowej – wtedy wyloguje nie tylko korzystając z innego komputera ale też z innej przeglądarki – oczywiście wszystkie te warunki połączyć - pomińmy sytuację że ktoś poustawia w przeglądarkach te same nagłówki ;p

pozatym przechowując paskey sesji to wcześniej zaniczyścić go np. czasem logowania (zapamiętać to także w bazie) - wtedy oba komputery na pewno będą miały różne paskey'e a jeden nieaktualny winksmiley.jpg

Ten post edytował zegarek84 26.05.2009, 09:17:28


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
Zyx
post
Post #13





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Opieranie zabezpieczeń sesji na adresie IP innym niż REMOTE_ADDR to zagrożenie dla bezpieczeństwa (przypomnę, że parę dziur w phpBB polegało właśnie na użyciu X_FORWARDED_FOR i podobnych wynalazków). Dlaczego? REMOTE_ADDR to adres, z którego serwer otrzymał żądanie HTTP i na który będzie odsyłać odpowiedź. X_FORWARDED_FOR i podobne to zwykłe nagłówki HTTP, które nie muszą być ustawione lub może być w nich dosłownie cokolwiek, nawet coś bezsensownego. Zawartość takiego nagłówka można prosto zmanipulować i wykorzystać go do oszukania systemu zabezpieczeń na nim bazującego.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
batman
post
Post #14





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Wszystkie nagłówki można zmodyfikować, więc ślepe poleganie na danych pochodzących od użytkownika jest co najmniej głupie.
Za każdym razem należy sprawdzić, czy mamy do czynienia z adresem IP.

~Zyx Twoje twierdzenie jest równie odkrywcze jak stwierdzenie, że niefiltrowane dane $_GET lub $_POST są niebezpieczne.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
wookieb
post
Post #15





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(batman @ 26.05.2009, 10:33:26 ) *
~Zyx Twoje twierdzenie jest równie odkrywcze jak stwierdzenie, że niefiltrowane dane $_GET lub $_POST są niebezpieczne.


Uwierz znajdzie się stado osób, które są pewne tego że dane te (REMOTE_ADDR, X_FORWARDED_FOR) są zaufane. Dla ciebie takie stwierdzenie może nie jest odkrywcze ale dla innych jak najbardziej. Dlatego też taki komentarz jest zbędny.

Ten post edytował wookieb 26.05.2009, 09:43:56


--------------------
Go to the top of the page
+Quote Post
batman
post
Post #16





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Jeśli ktoś nie zna podstaw bezpieczeństwa, to już nie mój problem. Przecież nie będę odpowiadał na pytanie i dodawał do tego wypracowania na 30 stron, zawierającego wszystkie aspekty poruszanej sprawy, od bezpieczeństwa zaczynając, na taktowaniu procesora kończąc.

Koniec OT.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
freeon
post
Post #17





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 26.05.2009

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


Cytat(mikowski @ 26.05.2009, 09:28:15 ) *
Witam,
troche sie zblokowalem. Mam nastepujacy przypadek uzycia :
- user loguje sie na strone z kompa 1 (ustawiamy sesje i cookie etc.)
- ten sam user dokonuje proby zalogowania na strone tyle ze z kompa 2

Jak wykryc taki przypadek i wygasic sesje (wylogowac) tego usera z strony otwartej na kompie 1 i pozostawic sesje na kompie 2 ?

Pozdrawiam


Robisz to w ten sposób ze w momencie logowania generujesz sobie losowy ciag znakow i zapisujesz sobie w bazie danych w tabeli users i w sesji ta wratosc. Potem tylko zostaje sprawdzenie czy wartosc w sesji jest taka sama jak w bazie danych jesli nie niszczysz sesje
Go to the top of the page
+Quote Post

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 Aktualny czas: 21.08.2025 - 05:56