Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP/MySQL] Zmiana Hasła - Problem
Reptile ReX
post 27.05.2008, 21:11:10
Post #1





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

Ostrzeżenie: (0%)
-----


Ostatnio chciałem zrobić u siebie w serwisie opcję do zmiany hasła więc zrobiłem sobie form'a

  1. Zmiana Hasła:
  2. <form action='' method='post'>
  3. Nowe Hasło:<input type='password' name='password'><BR><BR>
  4. Powtórz Hasło:<input type='password' name='password2'><BR><BR>
  5. <input type='submit' name='submit' value='Zmień'>
  6. </form>


Teraz zrobiłem taki skrypcik php:

  1. <?php
  2. if ($_POST['password']==$_POST['password2']){
  3. $zapyt=mysql_query("SELECT `id`, `login` FROM `users` WHERE `login` = '$nick'");
  4. $wynik=mysql_fetch_array($zapyt);
  5. $id=$wynik["id"];
  6. $change = "UPDATE `db570085`.`users` SET `haslo` = '$password2' WHERE `users`.`id` =$id LIMIT 1";
  7. }else{
  8.  echo 'Wpisałeś dwa rózne hasła<BR>'; }
  9.  if (@mysql_query ($change)) {
  10. echo "Gratulujemy $nick twoje hasło zostało zmienione";
  11. } else {
  12. echo "Error"; }
  13. ?>


niestety coś chyba z nim nie tak, ponieważ zmiana hasła nie działa poprawnie, zaznaczam że zmienna $nick jest zdefiniowana wcześniej).

Co zrobiłem nie tak? czekam na odpowiedź

Ten post edytował Reptile ReX 27.05.2008, 21:32:40
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
nithajasz
post 27.05.2008, 21:40:12
Post #2





Grupa: Zarejestrowani
Postów: 230
Pomógł: 27
Dołączył: 27.05.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Po pierwsze formularz gdzie wysyłasz? Jeśli masz action puste to skrypt wie tylko tyle, że ma nie robić żadnej akcji.

Mniemam, że $id jak $nick masz wcześniej zdefiniowane? a do $password masz wpisaną zmienną z $_POST?
Go to the top of the page
+Quote Post
Reptile ReX
post 27.05.2008, 21:50:46
Post #3





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

Ostrzeżenie: (0%)
-----


Załuzmy że mam podstronę settings.php i na niej jest ten form:
z tego co wiem to

<form action=''>oznacza to samo co np: <form action='settings.php '>

Piszę tak bo mi wpadlo już w nawyk ;]. fakt faktem że to w tym przypadku jest zbedne :]

A co do php, faktycznie nie zdefiniowałem zmiennej $password ;pp
na prostej rzeczy się wyłozyć ;/

zaraz sprawdzę i dam edita biggrin.gif
Go to the top of the page
+Quote Post
Shili
post 27.05.2008, 21:53:04
Post #4





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


Tak na marginesie - zawsze wykona Ci zapytanie do bazy, tylko w przypadku różnych haseł zapytanie będzie puste. Masz wyłączone raportowanie błędow przy zapytaniu, więc tego nie widzisz.
Go to the top of the page
+Quote Post
Reptile ReX
post 27.05.2008, 21:57:51
Post #5





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

Ostrzeżenie: (0%)
-----


@up, co powienienem zrobić?

edit: zmiana hasła działa, tylko teraz problem z tym co Shili mówiłeś, proszę o odpowiedz smile.gif

Ten post edytował Reptile ReX 27.05.2008, 22:09:03
Go to the top of the page
+Quote Post
pyro
post 27.05.2008, 22:06:10
Post #6





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


a tak nawiasem twój kod jest podatny na SQL Injection...


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
nithajasz
post 27.05.2008, 22:11:07
Post #7





Grupa: Zarejestrowani
Postów: 230
Pomógł: 27
Dołączył: 27.05.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@ <- znak małpy (@). Jeśli znak ten zostanie postawiony przed dowolnym wyrażeniem w PHP, jakiekolwiek powiadomienia o błędach wygenerowane przez to wyrażenie zostaną pominięte (nie będą wyświetlone).

Po drugie warunki masz faktycznie dziwne. W ten sposób jak masz wywołujesz zbędnie pustą funkcję..

Ten post edytował nithajasz 27.05.2008, 22:12:09
Go to the top of the page
+Quote Post
Reptile ReX
post 27.05.2008, 22:14:16
Post #8





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

Ostrzeżenie: (0%)
-----


pyro - wiem już właśnie zabezpieczyłem się:

  1. <?php
  2. $pass1 = htmlspecialchars($_POST['password'], ENT_QUOTES);
  3. $pass2 = htmlspecialchars($_POST['password2'], ENT_QUOTES);
  4. ?>


nithajasz - zaraz coś pokombinuję, mógłbyś mi pokazać co jest źle? czy mam sam próbować ? biggrin.gif
Go to the top of the page
+Quote Post
pyro
post 27.05.2008, 22:17:10
Post #9





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


[b]Reptile ReX[/b], twój kod nadal jest podatny na SQL Injection haha.gif


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
Reptile ReX
post 27.05.2008, 22:17:43
Post #10





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

Ostrzeżenie: (0%)
-----


Jak?, gdzie?, kiedy? biggrin.gif
Go to the top of the page
+Quote Post
Shili
post 27.05.2008, 22:20:39
Post #11





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


zapytanie włóż w ifa ze zgodnymi hasłami - wykona się tylko dla zgodnych haseł.

http://pl.wikipedia.org/wiki/SQL_injection - proponuję tą funkcję mysql winksmiley.jpg
Na razie zabezpieczyłeś się przed code injection winksmiley.jpg

Ten post edytował Shili 27.05.2008, 22:21:22
Go to the top of the page
+Quote Post
pyro
post 27.05.2008, 22:22:03
Post #12





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


aaa sorry, zauważyłem tylko htmlspecialchars, nbie zauważyłem ENT_QUOTES


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
nithajasz
post 27.05.2008, 22:22:57
Post #13





Grupa: Zarejestrowani
Postów: 230
Pomógł: 27
Dołączył: 27.05.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  1. <?php
  2. if ($_POST['password']==$_POST['password2'])
  3. {
  4. $zapyt=mysql_query("SELECT `id`, `login` FROM `users` WHERE `login` = '$nick'");
  5. $wynik=mysql_fetch_array($zapyt);
  6. $id=$wynik["id"];
  7. $change = "UPDATE `db570085`.`users` SET `haslo` = '$password2' WHERE `users`.`id` =$id LIMIT 1";
  8. if (mysql_query ($change)) {
  9. echo "Gratulujemy $nick twoje hasło zostało zmienione";
  10. } else {
  11. echo "Error"; 
  12. }
  13. } else {
  14.  echo 'Wpisałeś dwa rózne hasła<BR>'; 
  15. }
  16. ?>
Go to the top of the page
+Quote Post
Reptile ReX
post 27.05.2008, 22:30:50
Post #14





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

Ostrzeżenie: (0%)
-----


Hmm jakby nie było "ENT_QUOTES" trzeba było by zrobić tak?:

  1. <?php
  2. $change = mysql_real_escape_string("UPDATE `db570085`.`users` SET `haslo` = '$password2' WHERE `users`.`id` =$id LIMIT 1");
  3. ?>


to by wystarczyło? smile.gif

nithajasz - dzięki wielkie
Go to the top of the page
+Quote Post
marcio
post 27.05.2008, 22:56:16
Post #15





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


mysql_real_escape_string() daje sie na zmienne z zapytan z sql nie na cale zapytanie smile.gif


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 16:09