Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: logowanie - wydajność a bezpieczeństwo
Forum PHP.pl > Forum > PHP
Alek
Mam zrobić ograniczenie dostępu do działów pewnego serwisu - dla ok 30.000 userów mających loginy i hasła. Mają oni już tabelę w MySQLu [id,login,haslo,uprawnienia,data_waznosci].

Ograniczenie dostępu ma się tyczyć działów zawierających ok 50.000 rekordów (stronicowanych, z wyszukiwarką wg kategorii itp.) gdzie jest średnio 200 żądań na godzinę o szczegóły pojedyńczej informacji. Uprawniony user z aktualną datą ważności konta ma możliwość oglądania szczegółów informacji, pozostali są przekierowywani na stronę logowania.

Przy takich warunkach jak zrobić logowanie:
1. bezpiecznie - potencjalne podrabianie cookie (?), inne zagrożenia ?...
2. wydajnie - bez niepotrzebnych sięgnięć do bazy; czy za każdym klikiem muszę sprawdzać usera pod kontem ważności i poprawności jego loginu/hasła ?
thornag
Moze trzymaj w sesji date waznosci tego konta i ja sprawdzaj przy probie dostepu do zabezpieczonej strony, jesli data wygasla albo jej nie ma, znaczy ze user nie zalogowany wiec na strone logowania. Jednak to rozwiazanie wydaje mi sie malo eleganckie.

Moim zdaniem lepiej jest zbudowac caly mechanizm dostepu i autoryzacji. Userow trzymasz w jednej tabeli grupy w drugiej a w trzeciej powiazanie user_grupa. Tworzysz mechanizm logowania ktory zalogowana sesje trzyma w bazie danych i w ten sposob dzialasz. Zazwyczaj robi sie to tak ze tworzy sie klase UserSession odpowiedzialna za sesje uzytkownika modul Users ktory odpowiada uzytkownikowi. Przy kazdym requescie do strony UsserSession sprawdza czy jest odpowiednie ciastko czy waznosc sesji nie wygasla czy zgadza sie przegladarka, ip i co tam chcesz, jesli ciastko jest pobiera rekord z bazy uzywajac tego ciastka i inicjalizuje obiekt Usera wedlug jego id. UserSession przechowuje w sobie ten obiekt Usera wiec masz do niego dostep caly czas. Idac dalej User ma w sobie odpowiednie grupy wiec mozesz sprawdzac czy ma odpowiednia grupe do danego modulu strony. Waznoscia konta moze sie zajac UserSession w trakcie logowania. Zaleta takiego rozwiazania jest np to ze mozna w latwy i przyjemny sposob zliczyc ilosc odwiedzajacych gosci/userow itp. Co do bezpieczenstwa. Jest to co prawda cookie ktore jakos mozna wykrasc, ale ty przy tym sprawdzasz przegladarke, IP, ustawiasz odpowiedni czas trwania takiej sesji wiec powinno byc w miare bezpiecznie. Polecam do przeanalizowanie rozwiazanie Zyxa, pogoogluj napewno znajdziesz.

No to tyle smile.gif
marast78
według mnie to nigdy nie zdarzy się tak, że naprzykład 100 uzytkowników w tej samej chwili wykona logowanie a tym samym zapytanie do bazy danych, prawdopodobieństwo tego jest dość małe, więc wydajność tutaj raczej nie będzie zagrożona, korzystajac z cookies możesz zapamiątać na jakiś okes usera i wtedy będzie się logował automatycznie, oczywiście możesz dodać sprawdzanie IP itd. dodatkowo możesz jakoś to synchroizować, stosuj Ajaxa, który dodatkowo działa jak SSH i ziwększy wydajność logowania,,,
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.