Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 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
nospor
post
Post #2





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




Po pierwsze i najważniejsze:
nie da się przejśc z md5 na sha512. Czemu? Ano temu że nie mając md5 nie masz jak dostać się do hasła. Jedyne co możesz zrobić to zahashować md5 które już masz, a nie haslo, które się kryje pod md5
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:08:00 ) *
Po pierwsze i najważniejsze:
nie da się przejśc z md5 na sha512. Czemu? Ano temu że nie mając md5 nie masz jak dostać się do hasła. Jedyne co możesz zrobić to zahashować md5 które już masz, a nie haslo, które się kryje pod md5


Przecież to robię...

pod haslo znajduje sie wartość md5, więc hashuje przy pomocy sha512 - md5... później będę po prostu hashował najpierw przy pomocy md5, a później sha512 no i oczywiście SALT.

przy takim zastosowaniu mogę nabawić się najwyżej kolizji, ale przy sha512, czy tam whirlpool jest to raczej mało możliwe bo podobno kolizje nie zostały jeszcze odnalezione.

moje pytanie brzmi, czy da się wykonać ten UPDATE czy też nie?

Ten post edytował armon 30.09.2011, 10:14:27
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




  1. UPDATE klienci1 SET haslo = sha2(haslo,512)

Ale jeśli myślisz, że tym zabiegiem zwiększasz bezpieczeństwo to jesteś w blędzie
http://forum.php.pl/index.php?showtopic=44...t=0&start=0

Choć w przypadku, gdy masz dane już w md5, to może i w pewien sposób zwiększasz, bo na md5 już jest tyle masa tęczowych tablic, ze w zasadzie każde hasło w md5 jest jawne (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
armon
post
Post #5





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

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


Cytat(nospor @ 30.09.2011, 11:17:24 ) *
ku, gdy masz dane już w md5, to może i w pewien sposób zwiększasz, bo na md5 już jest tyle masa tęczowych tablic, ze w zasadzie każde hasło w md5 jest jawne (IMG:style_emoticons/default/smile.gif)


Nooooo dokładnie oto mi chodziło (IMG:style_emoticons/default/wink.gif)

No bo przecież jak mam w md5 hasło i skorzystam później z sha512 to powinienem zwiększyć bezpieczeństwo mojej bazy danych (IMG:style_emoticons/default/smile.gif)

md5 jest podatne na kolizje, więc korzystając z tej linii zabezpieczę się przed kolizjami oraz nie będę musiał wymagać od userów aktualizacji hasła (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




Cytat
md5 jest podatne na kolizje, więc korzystając z tej linii zabezpieczę się przed kolizjami oraz nie będę musiał wymagać od userów aktualizacji hasła
Proszę, przeczytaj cały temat, do którego dałem ci linka, i nie gadaj głupot.

Jedyny sens tej zamiany to jest ten, który napisałem
Cytat
Choć w przypadku, gdy masz dane już w md5, to może i w pewien sposób zwiększasz, bo na md5 już jest tyle masa tęczowych tablic, ze w zasadzie każde hasło w md5 jest jawne

A robiąc kolejne hashy z hashy to tylko zwiększasz kolizje
Powód edycji: [nospor]:
Go to the top of the page
+Quote Post
armon
post
Post #7





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

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


Cytat(nospor @ 30.09.2011, 11:27:10 ) *
Proszę, przeczytaj cały temat, do którego dałem ci linka, i nie gadaj głupot.

Jedyny sens tej zamiany to jest ten, który napisałem

A robiąc kolejne hashy z hashy to tylko zwiększasz kolizje



"Hashing SHA-256 over and over does not increase the chance of collisions AFAIK (as is the case with MD5), this is from what I’ve read and tests I’ve done myself. The added security comes from the time it takes to generate the hash, the same way Bcrypt does (you could of course just use Bcrypt but it’s not always available on shared hosts). Eating up server resources is a feature in this case."
"

To jedna rzecz, jednak ja nie mam zamiaru hashować md5 ponownie z 10 razy, tylko wykonać raz ponowne hashowanie na md5 przy pomocy sha512, aby w bazie były przechowywane hasła na 128 bitach nie na 32 oraz ostateczny algorytm szyfrujący nie był podatny na kolizje.

Przez co zabezpieczam się przed rainbow tables (niektórymi, bo jeszcze nie dodałem salta, ale też dodam), kolizjami.

Wystarczy zmienić później przykładowo:
  1. $pw = md5($pw_send_from_input);
  2. SELECT * FROM users WHERE pw = '{$pw}'

na
  1. $pw = hash('sha512',md5($pw_send_from_input));
  2. SELECT * FROM users WHERE pw = '{$pw}'


Oczywiście nie zapominając o salcie i innych sprawach i po problemie?

Go to the top of the page
+Quote Post
nospor
post
Post #8





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 #9





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
nospor
post
Post #10





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




Zdaje się, że mówiliśmy o kolizjach. Wytłumaczyłem ci więc, bo byłeś w błędzie, że zastosowanie sha512 na md5 wcale nie zmniejsza kolizji a wręcz odwrotnie.

Nie wiem jak się ma Twój wywód do tego. Skoro przeczytałeś tamten temat dokładnie, to przeczytaj go jeszcze ze zrozumieniem (IMG:style_emoticons/default/smile.gif)
Kolejne posty na temat podwójnego hashowania i super hiper tajnych algorytmów spowodują że ten temat zostanie zamknięty, ponieważ duplikujesz już treść podaną w temacie do którego cię odesłałem i nie ma sensu po raz kolejny na ten temat dyskutować.
Go to the top of the page
+Quote Post

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: 23.12.2025 - 10:48