Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Użycie logowania w bezpieczny sposób
Robert3d
post
Post #1





Grupa: Zarejestrowani
Postów: 102
Pomógł: 3
Dołączył: 22.04.2006

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


Witam

Piszę moduł logowania i zastanawiam się jak go używać.
Co jest bezpieczniejsze a może nie ma to znaczenia

  1. $logowanie->SprawdzCzyZalogowany(); // <- zobacz czy jest ok / lub die
  2.  
  3. // dalsza czesc strony
  4.  


czy może
  1. $
  2. if($logowanie->SprawdzCzyZalogowany() == 1){
  3.  
  4. /// zalogowany
  5.  
  6. }else{
  7.  
  8. /// zaloguj sie
  9.  
  10. }


Ten post edytował Robert3d 1.01.2012, 03:30:31
Go to the top of the page
+Quote Post
adbacz
post
Post #2





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Ja w swoich aplikacjach kiedyś używałem tego drugiego rozwiązania podanego przez Ciebie, tam gdzie potrzebowałem, ale po jakimś czasie doszło do tego, że to rozwiązanie było ajgorsze z możliwych bo jak przyszło co doc zego (do modyfikacji i dodawania) i była potrzeba ingerencji w jakąkolwiek część systemu logowania - to trzeba było zmieniac wszystko. Teraz jestem mądrzejszy, i zawsze kiedy mogę, to pisze sobie jakiś kawałek kody (nawet w przykłądowej klasie AutoRun), który będzie uruchamiany z każdym requestem. W tedy, dodajesz sobie tylko troszke if-ów (bo wątpię, żeby się bez tego obyło, chyba, że to aplikacja gdzie user MUSI być zalogowany by działać), kiedy i w jakich okolicznościach ma sprawdzać czy user jest zalogowany i to wszystko. A jak dojdzie co do czego to zmian dokonujesz tylko w jednym kawałku kodu.
Go to the top of the page
+Quote Post
Robert3d
post
Post #3





Grupa: Zarejestrowani
Postów: 102
Pomógł: 3
Dołączył: 22.04.2006

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


Dzięki ci za odpowiedz mam jeszcze jedno pytanie jakiego wzorca użyć najlepiej do pisania modułu logowania bo pisze już go 2 raz i zawsze mi się nie podoba (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
adbacz
post
Post #4





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Wzorca? To zależy od tego co potrzebujesz. Nikt Ci raczej nie powie dokłądnie "Użyj tego i tego, bo ja tego używam i to jest najlepsze", no chyba, że ktoś na prawdę nie jest zbyt myślącym i nie uczy się nowego tylko jedzie na starym "sprawdzonym". Napisz może jak Twoja aplikacja wygląda, w czym ją piszesz (jakiś FW, OOP a może strukturalnie), i jak do tej pory pisałeś, że stwierdziłeś, że Ci się "nie podoba" ((IMG:style_emoticons/default/wink.gif) ), może w tedy uda się coś podpowiedzieć. Ale nie oczekuj tego, że ktoś Ci pokaże dokładną drogę. Praca programisty polega na myśleniu i tylko czasami używaniu gotowców, w większości rzeczy trzeba samemu rozwiązać problem. A dlaczego? Bo na 90% rożawiązując go samemu czegoś się nauczysz.
Go to the top of the page
+Quote Post
by_ikar
post
Post #5





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


U siebie rozwiązuje to w ten sposób, że kontroler praktycznie uruchamiam na samym końcu, a wszystko co jest przed nim, w "jądrze" frameworka, uruchamia się różnie. Różnie, znaczy tyle, że są pewne elementy które muszą zostać uruchomione (cache, request, response, templates itp), ale również są elementy opcjonalne, które się uruchamiają jeżeli ustawię je w konfiguracji. Do takich uruchamianych w zależności od potrzeb, klas, należą klasy bazy danych, obsługi użytkownika, internacjonalizacja, sesja itp. Klasy do obsługi użytkownika, bo jest ich kilka, mają swoje zadanie. I jest tam między innymi klasa Authentication, odpowiedzialna za uwierzytelnianie użytkownika. Normalnie nie zalogowany użytkownik, dostaje odpowiednią role: ROLE_GUEST, jeżeli sobie w routingu ustawię że dla danej akcji wymagane będzie uprawnienie ROLE_USER, to klasa Authentication sprawdzi jaki poziom uprawnień posiada użytkownik i jest kilka warunków. Sprawdzanie czy zalogowany (ROLE_USER) i jeżeli nie jest, jest przekierowywany na podstronę logowania, jeżeli jest zalogowany i nie posiada odpowiednich uprawnień (ROLE_ADMIN przykładowo) dostaje komunikat (domyślnie wyjątek AccessDeniedException który dziedziczy po HttpException i dostanie błąd 403) o tym że nie posiada odpowiednich uprawnień.

Jeżeli bym umieścił gdzieś w module kod odpowiedzialny za uwierzytelnianie to powielać bym go musiał wiele razy. Jeżeli wrzuciłbym gdzieś to do kontrolera, a jednocześnie nie chciałbym używać klas użytkownika, również bym posiadał kod który robi coś, do czego dana klasa nie została przeznaczona. A ładowanie takiej usługi użytkownika, jest względnie proste:

  1. if(Config::has('framework.default_database') && Config::has('framework.session') && Config::has('framework.users'))
  2. {
  3. $this->container->setService('user.manager', new UserManager($this->container->getService('database'), $this->container->getService('request')));
  4. $this->container->setService('user', new User());
  5. $this->container->setService('user.auth', new Authentication($this->container));
  6. $this->container->setService('group.manager', new GroupManager($this->container->getService('database')));
  7. }


Z racji że przetestowałem kilka wariantów, wydaje mi się takie wyjście w moim przypadku najsłuszniejsze. Pomyśl o czymś podobnym, żeby całość jakoś elegancko wyglądała. Zwłaszcza z tym dostępem do strony, dla użytkownika o odpowiednich uprawnieniach (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
ano
post
Post #6





Grupa: Zarejestrowani
Postów: 435
Pomógł: 40
Dołączył: 16.02.2003
Skąd: Wrocław

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


Piszesz Symfony3? ;-)
Go to the top of the page
+Quote Post
by_ikar
post
Post #7





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Cytat(ano @ 5.01.2012, 00:44:36 ) *
Piszesz Symfony3? ;-)


Nie, ale trochę się wzorowałem na symfony. Trochę na zendzie, trochę na Yii i trochę na kohanie (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 12:38