Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak wysłać wartość aktualną z pola w bazie do funkcji php w zapytaniu MySQL z poziomu PHP?
armon
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 24.09.2009

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


Jak wysłać wartość aktualną z pola w bazie do funkcji php w zapytaniu MySQL z poziomu PHP?

Chodzi mi o coś takiego:
  1. $query = "
  2. UPDATE klienci1 SET haslo = hash(sha512,haslo)
  3. ";
  4.  
  5. mysql_query($query);


Oczywiście to jest źle. Da się tak w ogóle zrobić?

Chcę aktualizować wszystkie hasła z md5 do sha512.

Mógłbym pobrać wszystkie wartości, a następnie wykonać aktualizację, ale ciekawi mnie czy mogę to zrobić w jednym query przy pomocy UPDATE?

Ten post edytował armon 30.09.2011, 10:08:17
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Nie przeczytałeś....
Poszukaj w tamtym temacie postów ZYXa - on to bardzo ładne wyjaśnił, podał nawet przykłady. Może to cię przekona.
Skoro pierwsze hashowanie masz md5, a ono jest podatne na kolizje, to i cała reszta jest podatna na kolizje w twoim algorytmie.

Skoro dla md5 by mieć ciąg1 można podać ciągx i ciągy, to i automatycznie sha512(md5()) też przyjmie na pewno taką samą wartość zarówno dla ciągx i ciągy
Go to the top of the page
+Quote Post
armon
post
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 24.09.2009

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


Cytat(nospor @ 30.09.2011, 11:56:34 ) *
Nie przeczytałeś....
Poszukaj w tamtym temacie postów ZYXa - on to bardzo ładne wyjaśnił, podał nawet przykłady. Może to cię przekona.
Skoro pierwsze hashowanie masz md5, a ono jest podatne na kolizje, to i cała reszta jest podatna na kolizje w twoim algorytmie.

Skoro dla md5 by mieć ciąg1 można podać ciągx i ciągy, to i automatycznie sha512(md5()) też przyjmie na pewno taką samą wartość zarówno dla ciągx i ciągy


Przeczytałem te posty.

Zgadzam się z Tobą, ale popatrzmy się na to w taki sposób...

Gdyby haker dostał się do bazy danych, nie mając dostępu do mojego kodu może co najwyżej myśleć, że jest to 128 bitowy klucz i raczej nie ma pojęcia o tym, że wcześniej korzystano z md5.

A dodając, że sól byłaby zakodowana tak:
sha512(salt+md5(old_pw))

to pomimo tego, że haker nawet wiedziałby, że wcześniej korzystano z md5 nie mógłby tego złamać ze wzg. na sól?

Ok gdyby otrzymał dostęp do mojego kodu, wtedy bezpieczeństwo maleje, wtedy sha512(old_pw) > sha512(salt+md5(old_pw))

Mimo tego raczej hakerzy dostają się głównie do baz danych nie do kodu?

Jeśli by być upartym to można by to zrobić powoli jeszcze tak, aby przynajmniej sprawić, aby korzystający userzy z bazy danych mogli zostać uaktualnieni:

Dodać nową kolumnę is_pw_changed, a następnie:

  1. $login = mysql_real_escape_string("jakislogin");
  2.  
  3. $query = "
  4. SELECT id, haslo, is_pw_changed FROM klienci3 WHERE login = '$login'
  5. ";
  6.  
  7. $pw = "jakieshaslo4";
  8. $result = mysql_query($query) or die(mysql_error());
  9.  
  10.  
  11. $salt = "!@$!%@!TGASDHB^dasdg%!^&asd!&&!@#";
  12. $sha512pw = hash("sha512",$salt.$pw);
  13.  
  14. if (mysql_num_rows($result) > 0)
  15. {
  16. $result = mysql_fetch_assoc($result);
  17.  
  18. if ($result['haslo'] == $sha512pw)
  19. {
  20. //log in
  21. }
  22. else if (!$result['is_pw_changed '])
  23. {
  24. $md5pw = md5($pw);
  25. if ($md5pw == $result['haslo'])
  26. {
  27. $query = "
  28. UPDATE klienci3 SET haslo = '$sha512pw', is_pw_changed = 1 WHERE id = ".$result['id']."
  29. ";
  30.  
  31. $result = mysql_query($query) or die(mysql_error());
  32. //log in
  33. }
  34. }
  35. else
  36. {
  37. //error etc.
  38. }
  39. }


Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 28.12.2025 - 06:38