Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 516 Pomógł: 63 Dołączył: 27.08.2012 Ostrzeżenie: (0%)
|
Witam. Mam pytanie czysto teoretyczne tak więc nie będę wklejał niepotrzebnie kodu.
Przeleciałem już kilkanascie stronn na tym forum w poszukiwaniu pomocy, również w googlasie nie jest łatwo odzszukac jednoznaczej odpowiedzi na mój problem. Muszę zrobić jak najbezpieczniejsze logowanie. Robie duży projekt, w którym w gre już wchodzą pieniądze na kontach użytkowników. Dlatego tez mam pytanie odnośnie logowania, najpierw zaczne od tego co zrobiłem. w moim formularzu, mozna logowac sie poprzez email/login i hasło -najpierw pobieram dane i nakładam na nie "htmlspecialchar" -sprawdzam później poprzez wyrażenia regularne w php, czy oba pola posiadają dozwolone znaki. Dla loginu przewiduje tylko litery, cyfry i znaki używane w mailach. Dla hasła tylko cyfry i litery. - jeśli jest ok, sprawdzam, czy ktoś taki istnieje - po loginie albo emailu (poprzez funkcje sprawdzam kto co podał do logowania) - sprawdzam tylko czy istnieje takie ID w bazie i czy konto jest aktywne, jeśli tak pobieram tylko ID. - jeśli istnieje, tworze sesje i narazie to wszystko co do trzech pierwszy punktów, chce jeszcze dodać dla hasła znaki specjalne dla zwiększenia siły i wymóg w rejestracji do stosowania znaków specjalnych. mam dodaną również blokadę logowania dla IP na 15min jeśli w ciagu 5minut logował się bez powodzenia 20razy. Hasła są pięknie kodowane w sh1 i solone tak, że nie ma bata na złamanie. do sesji dodaje tylko ID użytkownika na zasadzie $_SESSION['identyfikator'] = $row['id']. No a póżniej sprawdzam czy istnieje taka sesja na odpowiednich stronach no i teraz odnośnie tworzenia sesji. Tutaj jest mój dylemat. Nie mogę sobie pozwolić na ataki, gdzie ktoś mógłby wejść na czyjeś konto i np zażądać wypłaty jego pieniędzy. Naczytałem się, że najbezpieczniej jest użyć do tego ciastek, gdzie do takiego ciastka wrzucam np te ID z sesji i sprawdzam za każdym razem czy sesja i ciastko są takie same. Wolałbym jednak nie bawić się w ciastka ze względu na to, że każdy ma prawo je blokować w przeglądarce. Wytłumaczcie mi jeszcze, jeśli zna ktoś mój identyfikator sesji czyli dla $_SESSION['identyfikator'] jest nią string "identyfikator", to co wtedy ? jakiś przykład ? Jak ktoś ma z was dobre doświadczenie odnośnie bezpieczeństwa sesji, prosze o pomoc merytoryczną jak najlepiej się zabezpieczyć. Tylko prosze prostym językiem i łopatologicznie bo jeszcze nigdy takich zabezpieczeń dla sesji nie robiłem. Ten post edytował gitbejbe 4.06.2013, 06:41:00 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
1. Logowanie - email i hasło - dla bezpieczeństwa zawsze podawaj jeden komunikat - "Podano niepoprawne dane" - nie podawaj czy był zły e-mail, czy hasło itp.
2. Trzymanie hasła w bazie - użyj jakiegoś algorytmu opartego o bluefish i podobne z dużą liczbą iteracji i długim czasem generowania skrótu, dodaj długi SALT (zerknij na PHPass) SHA1 to już przeżytek nie oszukujmy się - jesli w grę wchodzi kasa - lepiej poszukać czegoś mocniejszego. 3. Samo hasło - masz wymogi Giodo zapoznaj się z podstawowymi (8 znaków) i mocnymi (12 znaków) - możesz dodać też algorytm sprawdzania podobieństwa hasła do innych danych użytkownika (mail, login, imie itp) i blokować zbyt podobne (poczytaj o tym - znajdziesz coś napewno) 4. Blokada logowania po IP jest bardzo nieprzyjemna - polecam raczej np. 3 próby, potem CAPTCHA, potem dopiero blokada na określony czas. 5. Jakiś podstawowy mechanizm "utrudniający" logowanie BOTOM itp (tokeny itp) Co do sesji to panikujesz zupełnie (IMG:style_emoticons/default/biggrin.gif) Twoje podejście jest prawidłowe czyli: Logowanie -> zapis ID klienta w sesji w celu poznawania go. Sesja standardowo działa tak, że ma swój session_id po którym jest poznawana. Jest on zapisywany w ciastku. Taki mechanizm jest bezpieczny dopóki nikt nie ukradnie nam ciastka. To znaczy są dwa komputery - twój i włamywacza - Ty się logujesz - włamywacz zabiera ciastko i ustawia sobie i bach! jest zalogowany na Ciebie. Sytuacja ta jednak jest ciężka do ogarnięcia ale można się bardzo łatwo zabezpieczyć przed nią. Przy logowaniu zrób tak: user się loguje, sprawdzasz dane - są ok - więc: - dodajesz ID usera do sesji, - pobierasz id sesji (session_id) i mieszasz go dowolny algorytmem znanym tylko Tobie (np MD5 z ID sesji, IP, USER-AGENT, ID_usera) i zapisujesz w ciasteczku pod np. zmienną AUTH - po wejściu na stronę robisz łatwy skrypcik, który sprawdza czy w sesji jest id_user i jeśli tak to robisz jeszcze raz taką MD5kę i porównujesz ją z zawartością ciasteczka AUTH jeśli się zgadza jest ok - jeśli nie - masz WŁAM i możesz go zablokować - proste? Żeby włamywacz dał radę się włamać musiałby mieć dokładnie to samo IP, dokładnie tą samą wesję przeglądarki itd.. Co do pytania ostatniego to nie ma możliwości znalezienia tego co masz w kodzie (o ile się nie włamie na serwer) więc nieinteresuje Cię zupełnie to co trzymasz w sesji bo jest to wyłącznie lokalnie na serwerze (sesji nie ma w przeglądarce - tam jest tylko w ciastku zapisany identyfikator sesji). Mam nadzieję że Ci to pomoże - poczytaj więcej o tych sesjach (IMG:style_emoticons/default/wink.gif) |
|
|
|
gitbejbe [PHP]bezpieczne logowanie 4.06.2013, 06:40:24
Damonsson Jest milion artykułów o bezpieczeństwie sesji. Nik... 4.06.2013, 07:31:49
gitbejbe @Sephirus
I tego właśnie potrzebowałem, dzięki za... 4.06.2013, 08:16:54
Sephirus Cytatco do ciastka i blokady, to zamiast może soli... 4.06.2013, 09:29:31
gitbejbe super : )
mógłbyś podpowiedzieć jeszcze czy taki ... 4.06.2013, 17:56:33
ber32 Witam. Funkcja spr_ip() sama w sobie jest niebezpi... 4.06.2013, 22:52:04
gitbejbe właśnie, jak to jest z tym IP ? ten skrypt może by... 5.06.2013, 05:16:51
Sephirus Zamotałem się z tym Twoimi pytaniami ale po kolei ... 5.06.2013, 07:36:05
gitbejbe wylogowanie właśnie u mnie wyglada tak :
session... 5.06.2013, 09:51:03
mlawnik Evercookie może pomoc. 6.06.2013, 09:37:47
gitbejbe Evercookie to zbędne rozwiązanie do ciastek, które... 6.06.2013, 11:29:35
kosmaty_zab Ja to zrobiłem tak (na podstawie pracy użytkownikó... 7.06.2013, 01:05:22
gitbejbe @kosmaty_zab, dałem plusa bo się trochę napracował... 7.06.2013, 06:07:29
cykcykacz Jeżeli chodzi o sprawdzanie czy przeglądarka ma wł... 7.06.2013, 07:24:34
Sephirus Co do pytania
Odpowiem tak:
W obecnym czasie no... 7.06.2013, 07:38:04
gitbejbe @cykcykacz
Dzięki za linki. Rozwiązanie jest tak ... 7.06.2013, 09:44:54 ![]() ![]() |
|
Aktualny czas: 24.12.2025 - 18:30 |