Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: User Agent i adres IP dobre zabezpeiczenie?!
Forum PHP.pl > Inne > Komputery i oprogramowanie
Mateusz Bogolubow
Chciałbym oprzeć bezpieczeństwo skryptu m.in. o informacje o User Agent i adres IP. Wiem, że jest możliwość zmiany tychże informacji i nie jest to jednoznaczne identyfikowanie użytkownika.

Jednak nie na tym problem polega. Bardziej intryguje mnie to czy np. firewall lub inne podobne oprogramowanie/urządzenie zmienia te informacje za każdym wysłaniem żądania.

Nie chciałbym po prostu, aby użytkownik za każdym razem został wylogowany, ponieważ dane te ulegają zmianie.

PS. Zmiana adresu IP po wyłączeniu i ponownym włączeniu komputera nie jest problemem.
michalkjp
Cytat(Mateusz Bogolubow @ 26.09.2008, 14:37:01 ) *
Chciałbym oprzeć bezpieczeństwo skryptu m.in. o informacje o User Agent i adres IP.


Tak z czystej ciekawości – co masz na myśli mówiąc "chciałbym oprzeć bezpieczeństwo skryptu m.in. o..."?



Cytat(Mateusz Bogolubow @ 26.09.2008, 14:37:01 ) *
Jednak nie na tym problem polega. Bardziej intryguje mnie to czy np. firewall lub inne podobne oprogramowanie/urządzenie zmienia te informacje za każdym wysłaniem żądania.


Jeśli chodzi o adres IP, to nie jest on zmieniany często. Z tego co wiem, na neostradzie bez stałego IP adres był ustalany raz na 24 godziny (coś się mogło zmienić).

Informacje o przeglądarce można zmieniać przed każdym zapytaniem (plugin do FF - User Agent Switcher – może jest jeszcze jakiś, co robi to automatycznie). Pewnie jacyś paranoicy zmieniają co chwilę te informacje, bo myślą, że to właśnie ich śledzi Goog, ale takich ludzi jest raczej niewielu.
Mateusz Bogolubow
Cytat
Tak z czystej ciekawości – co masz na myśli mówiąc "chciałbym oprzeć bezpieczeństwo skryptu m.in. o..."?


Chciałbym porównywać obie wartości podczas jakiś akcji. Np. przy utworzeniu nowej sesji zapisuje do bazy info o UserAgent i IP. Następnie sprawdzam przy kolejnej akcji czy dane te się zgadzają. Jeśli nie użytkownik zostaje wylogowany, a akcja zaniechana.

Cytat
Jeśli chodzi o adres IP, to nie jest on zmieniany często. Z tego co wiem, na neostradzie bez stałego IP adres był ustalany raz na 24 godziny (coś się mogło zmienić).


Chodziło mi bardziej o jakieś proxy, które np. sprawdza obciążenia łączy na serwerach i wysyła zapytanie z różnych IP(w zależności od obciążenia łacza czy coś w tym stylu). Może wydawać się to trochę bezsensowne, ale staram się przewidzieć wszystkie za i przeciw mojego rozwiązania, a że nie mam doświadczenia w tej kwestii to trochę fantazjuje tongue.gif.

Cytat
Informacje o przeglądarce można zmieniać przed każdym zapytaniem (plugin do FF - User Agent Switcher – może jest jeszcze jakiś, co robi to automatycznie)


Tego się obawiałem.

Ktoś jeszcze dorzuci parę groszy... ?
l0ud
Istnieją takie łącza, w których IP zmienia się co każde wywołanie strony. Ja akurat spotkałem się tylko z tak działającym proxy, ale sądzę, że znajdzie się taki, kto ma to w standardzie. Co do user-agenta to on raczej sam z siebie się nie zmienia, aczkolwiek nie chciałbym zostać wylogowany tylko z powodu jego zmiany.
Mateusz Bogolubow
W takim razie jakie dane mogą jeszcze identyfikować użytkownika, które nie zmieniają się za często (nie często to np. co ponad 3h)?
michalkjp
Cytat(Mateusz Bogolubow @ 26.09.2008, 20:41:02 ) *
Chciałbym porównywać obie wartości podczas jakiś akcji. Np. przy utworzeniu nowej sesji zapisuje do bazy info o UserAgent i IP. Następnie sprawdzam przy kolejnej akcji czy dane te się zgadzają. Jeśli nie użytkownik zostaje wylogowany, a akcja zaniechana.


Obawiam się, że nie ma jakiegoś idealnego sposobu na identyfikacje zalogowanego użytkownika.

Jeśli przechowujesz w bazie informacje o logowaniu – data, ip etc, to możesz zrobić skrót md5 z tych informacji, zachować go jako zmienną sesyjną i u użytkownika jako ciasteczko. Później sprawdzać, czy dane się zgadzają.

Oczywiście ciasteczka mogą być problemem winksmiley.jpg

(To nie będzie działać, gdy użytkownik wyłączy ciasteczka np. w trybie pornowatnym czy przez proxy nieobsługujące ciasteczek)
Mateusz Bogolubow
Cytat
Jeśli przechowujesz w bazie informacje o logowaniu – data, ip etc, to możesz zrobić skrót md5 z tych informacji, zachować go jako zmienną sesyjną i u użytkownika jako ciasteczko. Później sprawdzać, czy dane się zgadzają.


Ale jeśli dane się zmieniają (o czym była mowa wyżej) to i tak nie ma sensu tego robić.

Zastanawiam się jeszcze ile można poświecić dla bezpieczeństwa. Czy utrudnienie rejestracji jakiejś części użytkownikom będzie dobrym rozwiązaniem (powiedzmy, że coś za coś)? Wiem, że brak obsługi cookies też uniemożliwi logowanie się przy mojej implementacji.
michalkjp
Chodziło mi o coś takiego:

  • użytkownik się loguje
  • zapisujesz w bazie dane o logowaniu, robisz skrót tych danych, zapisujesz jako zmienną sesyjną, wysyłasz jako cookie
  • porównujesz cookie u użytkownika z tym co jest zapisane w sesji
Dane nie będą się zmieniać.

Tylko nie wiem, czy takie "zabezpieczenie" ma jakikolwiek sens.



Cytat(Mateusz Bogolubow @ 26.09.2008, 21:57:22 ) *
Wiem, że brak obsługi cookies też uniemożliwi logowanie się przy mojej implementacji.


Ciekawe. Mógłbyś podać jakieś szczegóły co zapisujesz jako ciasteczko przy logowaniu?
Mateusz Bogolubow
Cytat
Ciekawe. Mógłbyś podać jakieś szczegóły co zapisujesz jako ciasteczko przy logowaniu?


Moje rozwiązanie oparłem o coś takiego: w ciasteczkach przechowuje jedynie unikalne wartości. Jedno ciasteczko to PHPSESSID zawierające ID sesji, drugie to kontrolne ciasteczko, które pozwala zapobiec przejęcia sesji.

Aby zwiększyć bezpieczeństwo sesji postanowiłem stworzyć własne rozwiązanie, które opiera się o bazę danych. Chodzi o to, że zamiast przechowywania sesji na dysku w katalogu np. temp do którego mają dostęp wszyscy dzierżawcy serwera przechowuje je w bazie danych. Dane te można wyciągnąć znając jedynie wartości przechowywane w ciasteczkach.
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.