![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 236 Pomógł: 0 Dołączył: 4.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Mam z internetu taki formularz dot. zmiany hasła w panelu użytkownika:
W bazie hasła w rejestracji koduje tak: Teraz problem pojawia się w edycji i uwierzytelnianiu. Po wpisaniu hasła takiego, jak przy rejestracji, wyskakuje komunikat, że hasła są nieprawidłowe. Jednak po skopiowaniu zakodowanego hasła i wpisanie go w pole formularza - wszystko jest ok. Błędem jest odkodowywanie hasła w pliku dot. edycji hasła. Jak to naprawić? Dzięki, pozdrawiam ![]() |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Wyrzuć to do kosza i napisz własny skrypt. Tego:
kodowaniem nazwać nie można. Powyższy fragment wycina 32 znaki z ciągu podanego przez użytkownika (niejawnie go oszukując) i troszkę zmodyfikowanego. Skrypt w ogóle nie jest bezpieczny, a tu się jeszcze hasło skraca. W dodatku autor nie używa żadnej funkcji hashującej. Ciekawym "zabiegiem" posłużył się autor skryptu wyłączając raportowanie uwag (E_NOTICE), co dało mu możliwość nadużywania funkcji empty(). Tymczasem empty() powinno mieć nieco inne zastosowanie. Poszukaj na forum, a z pewnością znajdziesz bardziej odpowiednie rozwiązania, a na pewno konkretne podpowiedzi. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Wystarczy funkcja update bazy danych.
A hasło pierw zakoduj md5 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 236 Pomógł: 0 Dołączył: 4.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Zabrałem z kodu tylko kawałek, lekko przerobiłem, działa, wywala notice i wyszło coś takiego:
Notice jest tutaj - if (empty($user[id]) OR !isset($user[id])) { tutaj - echo 'Witaj '.$user[nick].' zostałe/a pomylnie zalogowany/a, tutaj umieć ukryta strone tylko dla zalogowanych'; tutaj - if($_POST['zapisz']) i tutaj - echo $wiadomosc; jak to, niezdefiniowane? Jakby to usprawnić zważając na to, że chciałbym mieć poprawny ten kod. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze zauważ, że element tablicy $_POST['zapisz'] istnieje (jest ustawiony, ang. isset) tylko wtedy, gdy wyślesz dane poprzez formularz. Oznacza to, że przy każdym pierwszym wejściu na stronę będzie pojawiał się komunikat uwagi NOTICE, ponieważ takiego elementu jeszcze w talicy $_POST nie ma. W tym przypadku trzeba zastąpić linię 13 takim kodem (który de facto niewiele się różni):
Użytkownika powinieneś identyfikować po jego id, a nie po loginie. Skoro jest to formularz zmiany hasła i możesz określić login użytkownika, to i możesz określić jego id. Zastąp zatem ukryte pole login ukrytym polem id, i przekazuj w nim identyfikator użytkownika. Trzecia sprawa to kwestia użycia funkcji empty(). Po co kodować pusty łańcuch znaków (bo to się właśnie dzieje, gdy użytkownik nie uzupełni któregoś z pól)? Linie 16, 17 i 18 powinny się znaleźć dopiero w bloku if(empty($wiadomosc)) {. Natomiast instrukcja warunkowa w linii 20 powinna wyglądać tak: Pozostaje jeszcze kwestia użycia funkcji addslashes(). Modyfikuje ona hasło podane przez użytkowniaka, a wcale nie jest tutaj potrzebna. Oznacza to tyle, że hasło w bazie danych nie jest hasłem użytkownika. Jest wiele sposobów na zabezpieczenie hasła np. sól, podwójne hashowanie lub "miks" obu wspomnianych metod, itp. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 236 Pomógł: 0 Dołączył: 4.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Pozmieniałem, są jeszcze notice, ale nie tutaj tkwi błąd. Mianowicie: nie zmienia haseł w bazie. Co może być tego powodem?
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.06.2025 - 06:33 |