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.