![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 10.09.2003 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
Czesc.
Zrobilem sobie swoj wlasny mechanizm sesji i uwierzytelniania, z uzyciem bazy danych (MySQL). Gdy ktos chce skorzystac z mojego serwisu musi sie zalogowac, czyli podac nazwe uzytkownika, haslo i nazwe bazy danych z ktorej chce korzystac (to ostatnie to akurat sprawa "tematyki' mojego serwisu). Konta uzytkownikow i ich uprawnienia, a takze dane otwartych sesji sa zapisane w jednej "specjalnej" bazie danych. Po podaniu odpowiednich danych rozpoczyna sie sesja, w odpowiednich tabelach w tej "specjalnej" bazie jest zapisywana nazwa zalogowanego uzytkownika, numer IP komputera z ktorego sie zalogowal oraz wygenerowany identyfikator, a takze aktualne zmienne sesji. Identyfikator sesji jest przekazywany miedzy skryptami poprzez GET'a, w URL'u. No i tu wlasnie moj problem/pytanie. Czy wedlug Was ta metoda (przekazywania sid'a) jest bezpieczna? W kazdym skrypcie na samym poczatku pobieram z tablicy $_GET identyfikator sesji z URL'a i przekazuje go do funkcji ktora sprawdza jego "autentycznosc", czyli sprawdza czy w tabeli z danymi otwartych sesji istnieje rekord z danym sid'em a takze sprawdza czy numer IP z ktorego delikwent probuje uruchomic skrypt z podanym sid'em zgadza sie z numerem IP zapisanym w trakcie procesu logowania. Jesli ktos probuje uruchomic skrypt i wklepal recznie "jakos" zdobyty identyfikator sesji, ale numer IP kompa, z ktorego probuje uruchomic skrypt jest inny niz ten zapisany w tabeli o danych "legalnie otwartych" sesji no to ... stosowny komunikacik i koniec. Czy wedlug Was to zabezpieczenie z numerem IP jest wystarczajace? Nie jestem ekspertem od metod atakow na serwisy www (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 10.09.2003 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
Cytat kazdy uzytkownik moze sie laczyc z odpowiednigo hosta czyli mozesz wpisac do bazy danych i porownywac
Takie rozwiazanie raczej odpada. Chcialbym zeby logowanie sie do systemu bylo "uniwersalne". Jak prezes pojedzie do Krakowa na spotkanie z kontrahentem i siada sobie w knajpce na Rynku to chcialbym zeby mial mozliwosc zalogowania sie do systemu czy to ze swojego kompa czy z kompa kontrahenta, a nie musze wiedziec jakie ip dostanie w dzialajacej tam sieci radiowej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Cytat Oczywiscie co jakis czas (5 minu, 10 Twoja opcja) usuwaj sesje z bazy danych czyli musisz trzymac czas ostatniego wywolania
Kazda moja funcja zwiazana z sesjami wywoluje funkcje "czyszczaca" ktora usuwa z tabeli (powiedzmy "sessions") rekordy z sesjami "starszymi" niz ustalony w konfiguracji czas. Cytat ps. tez pisalem wlasny system logowania gdzie id_sesji jest przekazywane w GET myk jest taki ze te ID zmienia sie toz po zalogowaniu na inny
W mom mechanizmie wyglada to tak. Delikwent podaje swoje dane logowania. System sprawdza czy w tabeli (powiedzmy "users") jest taki koles i czy ma odpowiednie uprawnienia. Jesli tak to jest otwierana dla niego nowa sesja. System generuje NOWY unikalny identyfikator i zapisuje w tabeli "sesions" nowy rekord z tym identyfikatorem. Gdy delikwent sie wyloguje to rekord jest usuwany, lub po jakims ustalonym czasie "nieaktywnosci". Tak wiec za kazdym razem jest to nowy identyfikator. Problem w tym ze ktos moze podgladac ruch w jakiejs tam sieci i przechwicic ten identyfikator uzywany w danym momencie przez "legalnie" zalogowanego uztykownika, i probowac ze swojego kompa uruchamiac skrypty podajac ten identyfikator. Stad ten pomysl z zapisywaniem ip komputera z ktorego uzytkownik sie loguje. Oczywiscie gdy uzytkownik sie wyloguje to ip tez jest usuwane. Wszystkie dane dotyczace sesji sa usuwane. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 09:33 |