![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 31.07.2015 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Napisałem taką klasę logowania użytkownika w systemie. Nie jest jeszcze skończona, ale chciałem prosić o ewentualne wskazanie błędów w w/w kodzie, ponieważ dopiero zaczynam OOP w php.
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 355 Pomógł: 533 Dołączył: 15.01.2010 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Żeby było szybciej napiszę co jest dobrze: nic. Nie jestem złośliwy w tym wypadku, uwierz. Może komuś będzie się chciało tłumaczyć, więc nie kasuj wątku.
Wygoogluj sobie: php oop example, php oop login example itp. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Szybkie code review:
1.
znacznie czytelniejsza wersja
2. Nazwy metod z 4 liter. np "checkLoggin()" 3. $_SESSION['isLoggin'] rzuci notice jeżeli klucz nie istnieje 4. Odpowiedz mi na pytanie, po cholerę w metodzie, która ma przypisać coś do czegoś robisz return bool? Zamiast zwyczajnie przypisać i opuścić metodę
5. Zbędny else
6. Przeczytaj co to SÓL, bo ta metoda nie ma z nią nic wspólnego 7. Po co ci statyczne metody? Reszty już nie chce mi się sprawdzać - wszystko jest nie tak jak być powinno ![]() @edit a o hashowaniu hashó masz pogadankę w podczepionych Ten post edytował CuteOne 31.07.2015, 21:53:09 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 31.07.2015 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odp - poprawię ten kod i dam jeszcze raz.
Nie rozumiem tylko punktu 2 oraz 6 - możesz rozwinąć? |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 555 Pomógł: 84 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) ![]() ![]() |
2. Tutaj koledze chodziło o to, że nazwy metod jakie dobierasz odbiegają daleko od tego co dana metoda robi - np. isLoggin (lepsza nazwa to byłoby bodajże isLogged) sugeruje, że akcja sprawdza czy użytkownik jest zalogowany - tylko to. Twoja wersja z kolei jeszcze pod spodem robi własne logowanie, o czym nazwa metody nie mówi nic a nic.
6. Poczytaj o soli tutaj Temat: podwojne hashowanie hasel . Generalnie chodzi o to, że sól to pewny tajny string, którego używasz do konkatenacji z wpisanym przez użytkownika hasłem, by bronić się przed tęczowymi tablicami. Ta sól powinna być zahardkodowana gdzieś w kodzie Twojej aplikacji lub pobierana z jakichś plików źródłowych - nie powinna być trzymana w bazie danych koło hasła, bo wtedy skuteczność używania tej metody spada praktycznei do zera. -------------------- Wieloprocesowość i wielowątkowość w PHP, poznaj Kraken PHP!
Serwer HTTP i WebSocket w PHP | Promise/A+ Strona Domowa | Elradia MMORPG FireFox: make the web better. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 355 Pomógł: 533 Dołączył: 15.01.2010 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Ta sól powinna być zahardkodowana gdzieś w kodzie Twojej aplikacji lub pobierana z jakichś plików źródłowych - nie powinna być trzymana w bazie danych koło hasła, bo wtedy skuteczność używania tej metody spada praktycznei do zera. Jeżeli będzie zahardkodowana w kodzie, to będzie taka sama dla każdego usera i jej użyteczność bardzo mocno spadnie, w przypadku jej poznania. Znowu jeżeli będzie w bazie danych to będzie widoczna dla każdego hasła. Dlatego jestem zwolennikiem trzymania soli zarówno zahardkodowanej w kodzie jak i w bazie danych dla każdego hasła innej. Gdybym musiał wybierać nad tylko jednym sposobem trzymania soli, wybieram zdecydowanie opcję w bazie danych. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 31.07.2015 Ostrzeżenie: (0%) ![]() ![]() |
To chyba najlepiej podwójne hashowanie sola z bazy + solą ogólną dla systemu?
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
A nie lepiej użyć jednego kodowania ale mocnego? Dajmy na to BlowFish, sha512 lub whirlpool ? Złamanie takiego hasła jest *nie możliwe (* nie możliwe w rozsądnym czasie)
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 555 Pomógł: 84 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) ![]() ![]() |
Cytat Dlatego jestem zwolennikiem trzymania soli zarówno zahardkodowanej w kodzie jak i w bazie danych dla każdego hasła innej. Bez sensu trzymać sól w bazie danych, skoro używa się jej właśnie po to, by włamywacz nie był w stanie odszyfrować hasz haseł za pomocą tęczowych tablic po zdobyciu dostępu / zrzutu bazy danych aplikacji. Jest super mało prawdopodobne, że ktoś taki zdobędzie same hasze z bazy , ale soli już nie, dlatego tak jak pisałem - albo hardkodujemy sól w kodzie aplikacji albo pobieramy z zewnętrznego źródła. Polecam jednak hardkodować, bo jak w jakiś sposób stracisz sole wygenerowane dla pojedynczych użytkowników to będzie przeje.... ![]() -------------------- Wieloprocesowość i wielowątkowość w PHP, poznaj Kraken PHP!
Serwer HTTP i WebSocket w PHP | Promise/A+ Strona Domowa | Elradia MMORPG FireFox: make the web better. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 33 Dołączył: 8.09.2014 Ostrzeżenie: (0%) ![]() ![]() |
Bez sensu trzymać sól w bazie danych, skoro używa się jej właśnie po to, by włamywacz nie był w stanie odszyfrować hasz haseł za pomocą tęczowych tablic po zdobyciu dostępu / zrzutu bazy danych aplikacji. nikt nie powiedział, że kod musi wyglądać tak:
sól z bazy możesz zmienić w skrypcie w sposób, w jaki Ci się podoba Ten post edytował borabora 1.08.2015, 20:42:51 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 31.07.2015 Ostrzeżenie: (0%) ![]() ![]() |
Trochę zmieniłem kod klasy - może to jest trochę bardziej prawidłowe od poprzedniego?
Jeśli chodzi o metody statyczne to zdefiniowałem je aby także użyć w innych klasach jak user -> rejestracja.
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Już trochę lepiej to wygląda ale gdybyś pracował jako programista taki kod nigdy nie wszedłby na produkcję
![]() Szybkie CR 1. Nie rób jednej klasy, która robi masę różnych rzeczy - widziałeś kiedyś bolida F1, który kosi trawnik, ora pole i rozwozi mleko? Podziel tą klasę na mniejsze odpowiadające różnym zadaniom - coś odpowiedzialnego za obsługę sesji - coś co filtruje/waliduje dane - klasa autoryzacji (nie myl z "logowaniem" - klasa logowania jedynie korzysta z klas autoryzacji) - klasa obsługująca akcje autoryzacyjne - logowanie, wylogowanie czy rejestracja - klasa trzymająca dane użytkownika - login, id itp. - klasa obsługująca hashowanie itp. 2. Za dużo if else. Poważnie... przemyśl czy nie da się tego uprościć/rozbić na kilka metod 3. " header("Location: index.php?msg=logout");" to powinno wylecieć, metoda logout ma TYLKO jedno zadanie - usuń sesję użytkownika - tyle, żadnych redirectów czy echów. To samo tyczy się innych metod 4. Do konstruktora, możesz przekazać tablicę jako handler bazy danych (brak "wymuszenia" typu danych) 5. Pomijam ocenę tych czasochłonnych operacji przy generowaniu soli (kwestia gustu) jednak istnieją prostsze metody jej generowania ![]() 6. Cóż to za potworek.. ? 7. I kolejny
@edit w metodzie 'userLogin()' robisz
po czym w setSessionData() robisz ponownie to samo... Ten post edytował CuteOne 1.08.2015, 22:58:24 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 31.07.2015 Ostrzeżenie: (0%) ![]() ![]() |
Z tego co piszesz to rozumiem że lepiej zrobić zamiast:
to:
Czy taki zapis będzie lepszy od else if ? Wtedy też likwiduje to ten dziwny zapis:
Ten pierwszy potworek: sprawdza czy user jest zalogowany (w klasie) i jeśli nie jest, a istnieją dane sesyjne to ma przypisać ich wartości do pól klasy. Czy po prostu to powinien zrobić konstruktor - np sprawdzić przy tworzeniu obiektu czy są zmienne sesyjne i je przypisać? Ten post edytował michalboss 3.08.2015, 11:22:19 |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Jesli chcesz spojrz na moja klase do logowania nie jest to na pewno jakis super kod ale moze ci pomoc, tak jak widzisz klasa uzywa wiele innych bibliotek i jest podzielona na wiecej "czesci"
https://github.com/marcio199226/Volta-frame...ollers/auth.php -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
I jest równie fatalnie napisana co autora wątku.
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
I jest równie fatalnie napisana co autora wątku. No skoro tak twierdzisz to pokaz twoja ![]() -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
A kto powiedział że takową mam. Ja nie wymyślam koła na nowo
![]() |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 3.08.2015 Ostrzeżenie: (0%) ![]() ![]() |
Żeby było szybciej napiszę co jest dobrze: nic. Nie jestem złośliwy w tym wypadku, uwierz. Może komuś będzie się chciało tłumaczyć, więc nie kasuj wątku. Wygoogluj sobie: php oop example, php oop login example itp. Witam, więc prosiłbym abyś pokazał dobry przykład jak to się dokładnie robi, aby początkujący programiści nie musieli na przyszłość błądzić. Pozdrawiam ![]() |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
A kto powiedział że takową mam. Ja nie wymyślam koła na nowo ![]() Ja tez nie, uzywam rozne fw ale to mi nie przeszkadza w napisaniu czegos mojego w wolnym czasie skoro jestes taki dobry tylko w uzywaniu np symfony2 to po co sie odzywasz widze ze ostatnio na tym forum cos sie ludzia w glowkach popitolilo zejdzie na ziemie ludzie. -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
... widze ze ostatnio na tym forum cos sie ludzia w glowkach popitolilo zejdzie na ziemie ludzie ... Niektórzy tak lubią, z lenistwem i stagnacją nie wygrasz. A co do dobrej klasy logowania, to praktycznie każdy FW ma takową w dokumentacji. -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.06.2025 - 22:25 |