Na czym polega uwierzytelnianie użytkownika w aplikacji internetowej?
Uwierzytelnianie odpowiada na pytanie „kim jesteś?”. Użytkownik przedstawia dane, które może znać lub mieć tylko on, a aplikacja sprawdza je ze swoją bazą. Najczęściej to login i hasło, coraz częściej uzupełnione drugim składnikiem, np. kodem z aplikacji w telefonie.
W PHP hasła nie przechowuje się jawnie: przy rejestracji zapisuje się skrót z password_hash(), a przy logowaniu porównuje go funkcją password_verify(). Po udanym uwierzytelnieniu identyfikator użytkownika trafia do sesji, np. $_SESSION["user_id"], żeby nie logował się na każdej podstronie. Zapamiętaj trzy pojęcia: walidacja sprawdza dane, uwierzytelnianie tożsamość, autoryzacja uprawnienia.
Dobrze zaprojektowany formularz logowania nie zdradza, czy błędny był login, czy hasło.
Ten temat myli się łatwo, bo wszystkie odpowiedzi opisują prawdziwe mechanizmy bezpieczeństwa, tylko inne. Sprawdzanie, czy dane w polach spełniają reguły, to walidacja: czy adres e-mail ma znak @, czy pole nie jest puste, czy wiek jest liczbą. Walidacja nie wie, kim jest osoba wpisująca dane.
Ustalenie, do czego zalogowany użytkownik ma dostęp, to autoryzacja. Odpowiada na pytanie „co ci wolno?” i następuje dopiero po uwierzytelnieniu. Zwykły uczeń widzi swoje wyniki, administrator panel zarządzania.
Szyfrowanie transmisji zapewnia protokół HTTPS. Chroni przesyłane hasło przed podsłuchaniem w sieci, ale samo nie sprawdza, czy hasło jest prawidłowe. Bezpieczne logowanie wymaga obu mechanizmów, a mimo to są to dwie różne rzeczy.
Kolejność w aplikacji jest stała: najpierw walidacja danych z formularza, potem uwierzytelnienie tożsamości, a na końcu autoryzacja dostępu do konkretnych stron.