PHP PDO password_verify nie działa |
PHP PDO password_verify nie działa |
5.12.2017, 11:30:17
Post
#1
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 16.01.2014 Ostrzeżenie: (0%) |
Witam
Mam problem z logowanie, ponieważ nie wiem jak odczytać zaszyfrowane hasło. W rejestracji wrzucam je tym:
W logowaniu próbuję wybrać i odczytać tym ale nie przepuszcza. Hasła nie szyfrowane loguje normalnie.
Jak to poprawić? |
|
|
5.12.2017, 11:33:01
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 446 Pomógł: 6292 Dołączył: 27.12.2004 |
$query->execute(array(':username'=>$this->username,':password'=>$this->password));
A co masz pod $this->password? W ogole w tym warunku ma nie byc password, tylko samo username. password potem sprawdzasz przez password_verify() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
5.12.2017, 12:11:06
Post
#3
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 16.01.2014 Ostrzeżenie: (0%) |
Pod $this->password siedzi to co wpiszę w formularzu logowania. Wyżej jest przekazywane.
I jak dalej? |
|
|
5.12.2017, 12:13:27
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
I jak string 'moje_haselko' ma być równy np zapisanemu w bazie $argon2i$v=19$m=1024,t=2,p=2$TmxLemFoVnZFaEJuT1NyYg$4j2ZFDn1fVS70ZExmlJ33rXOinafcBXrp6A6grHEPkI ?
Masz pobrać użytkownika bez AND password... i następnie sprawdzić password_verify oba stringi. -------------------- |
|
|
5.12.2017, 12:43:28
Post
#5
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Tylko broń cie panie nie próbuj robić password_hash i tego porównywać gdziekolwiek...
|
|
|
5.12.2017, 12:46:58
Post
#6
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 16.01.2014 Ostrzeżenie: (0%) |
Nie do końca rozumiem. Dlaczego nie pobierać password z bazy(czyli tego ciągu znaków zaszyfrowanego) skoro muszę go przyrównać z tym co w formularzu ktoś podaje?
Chyba że ja nie rozumiem na czym polega rozszyfrowanie tego. Tylko broń cie panie nie próbuj robić password_hash i tego porównywać gdziekolwiek... Dokładnie - chyba nie wiem na czym to polega Możecie rozjaśnić? Tylko nie odsyłajcie do manuala bo ja już parę dni z tym walczę. Ten post edytował alberthus 5.12.2017, 12:48:56 |
|
|
5.12.2017, 12:49:26
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Masz pobrać hasło z bazy ale tylko na podstawie username. Ta część - AND password = :password nigdy ci się nie zgodzi bo to dwa różne stringi.
I do tego skrypt wywali ci się jeśli wybierze więcej niż jeden wynik. Tutaj masz masz opisane bez bazy. Ten post edytował viking 5.12.2017, 12:50:04 -------------------- |
|
|
19.06.2018, 20:09:55
Post
#8
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 16.01.2014 Ostrzeżenie: (0%) |
Wróciłem do tego projektu po dłuższym czasie ale nadal jest problem.
Otóż przepuszcza mnie z byle jakim hasłem. Pod $this->password siedzi hasło, które przyszło z formularza a pod $wynik['password'] jest zaszyfrowane hasło z bazy Jak to naprawić?
|
|
|
21.06.2018, 07:27:07
Post
#9
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
No i? Teraz kod jest ok więc może oświecisz co nie działa.
|
|
|
21.06.2018, 19:13:53
Post
#10
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 16.01.2014 Ostrzeżenie: (0%) |
Jak podam błędny login i hasło to wyrzuci Exception("error") ale jak podam poprawny login i dowolne hasło to loguje.
Tą część źle wykonuje. Echa nie pokazuje.
Ten post edytował alberthus 21.06.2018, 19:19:49 |
|
|
21.06.2018, 20:09:00
Post
#11
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
To może pokaż cały kod a nie tylko urywek. Bo na razie pokazałeś 2 kawałki kodu które nie są ze sobą zbieżne.
|
|
|
22.06.2018, 14:46:37
Post
#12
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 16.01.2014 Ostrzeżenie: (0%) |
a w kontrolerze tworze obiekt.
chodzi o to że loguje mnie z dowolnym hasłem. przy rejestracji mam:
Ps. to pilotażowy projekt do nauki PDO, niekomercyjny |
|
|
22.06.2018, 14:53:28
Post
#13
|
|
Grupa: Moderatorzy Postów: 36 446 Pomógł: 6292 Dołączył: 27.12.2004 |
No i jakim cudem ma ci bronic dostepu w przypadku zlego hasla jak jedyne co robisz to wyswietlasz echo ze zle haslo...
Rownie dobrze mozesz zrobic zabezpiecznie antywlamaniowe: zostaw otwarte drzwi i na kartce tylko napisz: "prosze, nie okradajcie mnie". Podobny poziom zabezpieczenia co masz teraz w kodzie -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.06.2018, 15:08:45
Post
#14
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Loguje bo dowolny utworzony obiekt zawsze będzie == true.
To co musisz zrobić to w metodzie getData() ustawić jakieś property np. private $logged = ... do tego jakaś metoda typu isLogged() która zwróci wartość tego property a na końcu tam gdzie masz swój warunek $login == true zamienić na coś typu if($login->isLogged()) |
|
|
Wersja Lo-Fi | Aktualny czas: 19.04.2024 - 03:48 |