![]() |
![]() |
![]()
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 HUH !
podawanie id w urlu jest bezpieczniejsze ? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) No wlasnie to mial byc, wedlug moich zamierzen, temat tej dyskusji czyli bezpieczenstwo/zagrozenia zwiazane z przekazywaniem sid-a w URL-u (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Cytat Obojętnie gdzie by nie było, to i tak szansa że strzelisz numer sesji i trafisz taki który ci coś da jest bardzo małe... (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Wklepywania sid-a tak na "chybil trafil" raczej nie traktuje powaznie. Jak powiedziales, prawdopodobienstwo "trafienia" jest naprawde niewielkie. Realnym zagrozeniem jest natomiast taka sytuacja: uzytkownik A zalogowal sie do serwisu, uzytkownik B "jakos" przechwycil sid-a i chcac namieszac wklepuje go recznie ze swojego kompa. Dlatego pomyslalem o tym zapisywaniu numeru ip. Gdy uzytkownik A loguje sie, do bazy jest zapisywany jego numer ip (razem z identyfikatorem sesji). Gdy uzytkownikA sie wylogowuje to jego sesja sie konczy i jej rekord zostaje usuniety, i wtedy uzytkownik B nic nie zrobi bo jego "przechwycony" sid jest "nieaktualny". Moze on nieszac wtedy gdy zalogowany jest uzytkownik A (z aktywna sesja) Gdy uzytkownik B chce uruchomic jakikolwiek skrypt (z podanym recznie sid-em) to jest sprawdzany numer ip z ktorego probuje to robic i jak sie nie zgadza z tym wpisanym w bazie to go "wywala". I to na razie dziala, poniewaz moj system dziala na razie tylko w sieci lokalnej. W niej moge sobie uzywajac php odczytac numer ip delikwenta (chocby odczytujac go z tablicy $_SERVER, pole "REMOTE_ADDR"). Problem pojawia sie w sytuacji logowania sie z zewnatrz sieci lokalnej. Posluze sie przykladem wspomnianej w poprzednim poscie sieci radiowej na Krakowskim rynku. Nie laczylem sie stamtad nigdy ale podejrzewam, ze koles, ktory sie podepnie do tej sieci, dostaje tymczasowy, dynamicznie przydzielony numer, ktory jest unikalny jedynie w ramach tej sieci radiowej. Na zewnatz tej sieci wszyscy jej uzytkownicy sa widoczni pod jednym numerem ip. I przykladowo jesli wspomniany prezes zaloguje sie do mojego systemu, to drugi pracownik firmy probujacy zalogowac sie z tej sieci nie zostanie wpuszczony bo bedzie mial ten sam numer ip, co wczesniej zalogowany prezes. I to dotyczy wszystkich sieci, podsieci, z ktorych ruch idzie przez proxy, maskarady i inne takie. I dlatego sa takie same numery ip, a czasami php nawet nie potrafi tego numeru odczytac (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 09:33 |