![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 11.04.2014 Ostrzeżenie: (0%)
|
Witam.
Jestem nowy w temacie frameworków, YII jest pierwszym, którego się uczę więc jestem jeszcze lekko zagubiony. Przestudiowałem książke Helionu o YII (nie zachwyciła mnie szczerze mówiąc) ale nadala wielu rzeczy nie rozumiem. Moje pytanie dotyczy bezpieczeństwa takiego skryptu logowania: Model:
Widok
Kontroler:
Ten skrypt jest napisany na podstawie tej właśnie książki (a raczej w większości z niej przepisany z moimi lekkimi zmianami). Chciałbym się dowiedzieć czy tak przygotowany skrypt logowania jest bezpieczny i może być bez obaw zastosowany na stronach opublikowanych online? Bo powiem szczerze, że mam lekkie obawy gdyż wiem ile trzeba sobie zadać trudu pisząc coś takiego w czystym PHP (głównie chodzi o walidację). Przepraszam za tak laickie pytanie ale jestem mocno początkujący a do dyspozycji mam tylko tą książkę i dokumentację, która jest napisana dosyć ciężkim wg mnie językiem. Praktycznie nie ma innych źródeł w języku polskim. Pozdrawiam i z góry dziękuję za odpowiedzi. |
|
|
|
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 4 Dołączył: 18.01.2012 Ostrzeżenie: (0%)
|
Wybrałeś dobry framework, więc korzystaj z jego dobrodziejstw. Nie pisz tego ręcznie, użyj UserIdentity, tak jak pokazują w manualu. Autoryzacja tam pokazana jest napisana na prawdę dobrze, nie ma co kombinować. Jeżeli wykonasz to tak, jak opisują w linku poniżej, możesz spać spokojnie.
Jeżeli nie jesteś pewien co do walidatorów, zawsze możesz przeczytać ich kod. Ja to zrobiłem, są napisane na prawdę dobrze. http://www.yiiframework.com/doc/guide/1.1/pl/topics.auth Btw, nie rób tak dużo "enterów" w kodzie, bo nie da się tego czytać. (IMG:style_emoticons/default/smile.gif) |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 11.04.2014 Ostrzeżenie: (0%)
|
Witam ponownie.
Po 2 dniach i przejrzeniu niezliczonej liczby stron i forów wreszcie naskrobałem działający formularz logowania ale, że jego bezpieczeństwo jest bardzo ważne to prosiłbym o sprawdzenie i pokazanie ewentualnych błędów/uchybień. Tam gdzie się da to nie będę wstawiał całego kodu tylko jego istotne fragmenty. Kontroler:
LoginForm.php
Uzytkownicy.php
UserIdentity.php
Widok:
Co o tym sądzicie? Wydaje mi się, że jest to strasznie chaotycznie napisane bo to jest zlepek kilku formularzy przerobionych przeze mnie. Szczególnie mnie zastanawia czy nie dałoby się połączyć LoginForm.php i Użytkownicy.php w jeden model? Tylko wtedy musiałby dziedziczyć jednocześnie po CActiveRecord i CFormModel co jest chyba niemożliwe? Byłbym bardzo wdzięczny za wskazówki co można poprawić aby ten interfejs logowania był prostszy i bezpieczny. Mam jeszcze jedno pytanie. W książce z Helionu autor zalecał dodanie w config/main.php czegoś takiego:
a w bazie danych tabelę sesji, w moim przypadku spr_session(id, expire, data). Może mi ktoś wytłumaczyć do czego to słuzy i co to ma dać? Bo testowałem zarówno z tym fragmentem jak i bez niego i firebug pokazuje dokładnie tak samo cookies sesyjne, a jedyna róznica jest w tym, że w tej tabeli zapisują się identyfikatory sesjii. Byłbym wdzięczny jakby mi to ktoś przy okazji wytłumaczył. Pozdrawiam i z góry dziękuję za odpowiedzi. Ten post edytował skorpionek93 14.04.2014, 17:51:47 |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%)
|
Kiedyś napisałem tak
|
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 4 Dołączył: 18.01.2012 Ostrzeżenie: (0%)
|
Wszystko fajnie, ale nie hashujesz hasła, albo ja nie widzę. Hasło trzymane w plain tekście to zło. Yii dostarcza fajny helper, który pomaga prawidłowo hashować hasła. Jego użycie jest banalnie proste. W zasadzie sprowadza się do wywołania dwóch metod, na pewno dasz sobie radę. Hasła hashowane metodami tej klasy są hashowane z użyciem mcryptu bodajże, a więc aktualnego standardu polecanego przez samo php.net.
http://www.yiiframework.com/doc/api/1.1/CPasswordHelper Jeżeli chodzi o połączenie modelu Użytkownicy i LoginForm, to jest to niemożliwe. Dla początkujących w tym FW może wydać się to pogmatwane, ale ogólna zasada brzmi, że kiedy zapisujesz dane w bazie używaj ActiveRecord, a kiedy tylko pobierasz a potem porzucasz (np. formularz kontaktu, gdzie pobierasz dane, wysylasz maila i je porzucasz) to FormModel. Sesje na bazie to fajna sprawa, szczególnie na współdzielonych hostingach. Nie będę tu teraz o tym mówił, bo to dość rozległy temat, ale: jeżeli chcesz większe bezpieczeństwo, użyj bazy danych. Ciastko zawsze będzie, bo zawsze jest porównanie id z ciastka == id z bazy || id z ciastka == id na serwerze (gdzie normalnie trzymane są dane sesji). Jeżeli masz jeszcze jakieś pytania, to pisz. PS. Pod żadnym pozorem nie używaj SHA1 jak kolega wyżej oraz nie realizuj hashowania z UserIdentity, rób to w modelu. Ten post edytował NetBeans 14.04.2014, 18:25:44 |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 11.04.2014 Ostrzeżenie: (0%)
|
Jeśli chodzi o hashowanie to w kilku przykładach było realizowane za pomocą md5 ale je wyciąłem chwilowo żeby kod był czytelniejszy (podczas kombinowania z niedziałającym kodem im mniej znaków tym lepiej) a później zapomniałem dokleić ale oczywiście.
Dziękuję za pomoc (IMG:style_emoticons/default/smile.gif) To moje początki z Yii więc pewnie jeszcze niejedno pytanie zadam w tym dziale (IMG:style_emoticons/default/tongue.gif) Pozdrawiam Edit:// Czyli rozumiem, że hashowanie najlepiej wykonać tutaj:
czyli przed przekazaniem hasła do UserIdentity? Dobrze myślę? Ten post edytował skorpionek93 14.04.2014, 18:50:01 |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 4 Dołączył: 18.01.2012 Ostrzeżenie: (0%)
|
W zasadzie pasowałoby w modelu użytkownika, ale żeby zbytnio nie kombinować, to proponuję tak:
UserIdentity
|
|
|
|
![]() ![]() |
|
Aktualny czas: 23.12.2025 - 11:07 |