Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Szyfrowanie/hashowanie od podstaw
kropamk
post
Post #1





Grupa: Zarejestrowani
Postów: 156
Pomógł: 12
Dołączył: 30.11.2011
Skąd: Gdańsk

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


Witam.
Nie za bardzo rozumiem jak mam umieścić md5 w skrypcie aby wszystko działało poprawnie.

Rejestracja wygląda tak:
  1. <?php
  2. // DEKLARACJA ZMIENNYCH Z FORMULARZA //
  3. $username = $_POST['username'];
  4. $password = $_POST['password'];
  5. $password_confirm = $_POST['password_confirm'];
  6. $mail = $_POST['mail'];
  7.  
  8. // sprawdzenie czy zmienne zostaly wprowadzone
  9.  
  10. if($username&&$password&&$mail)
  11. {
  12. $connect = mysql_connect("localhost","root","haslo") or die ("Nie można się połączyć");
  13. mysql_select_db("baza", $connect) or die("Nie można znaleźć bazy danych");
  14.  
  15. $duplicate = mysql_query("SELECT * FROM USERS WHERE login='$username' || mail='$mail'");
  16. $num_rows = mysql_num_rows($duplicate);
  17.  
  18. if ($num_rows){
  19. echo "Podana nazwa użytkownika lub e-mail jest już w użyciu";
  20. return;
  21. }else
  22.  
  23. $insertquery = "INSERT INTO users (Login, Password, Mail) VALUES ('$username','$password','$mail')";
  24. if (!mysql_query($insertquery))
  25. {
  26.  
  27. die('Error: ' . mysql_error());
  28. }
  29. echo "Dodano użytkownika";
  30.  
  31. } else
  32. die("Nie można było dodać użytkownika, wypełnij pola poprawnie.");
  33.  
  34. mysql_close($connect)
  35. ?>


a logowanie tak
  1. <?php
  2. $username = $_POST['username'];
  3. $password = $_POST['password'];
  4.  
  5. if($username&&$password)
  6. {
  7. $connect = mysql_connect("localhost","root","haslo") or die ("Nie można się połączyć");
  8. mysql_select_db("baza", $connect) or die("Nie można znaleźć bazy danych");
  9.  
  10. $query = mysql_query("SELECT * FROM users WHERE login='$username' && password='$password'");
  11.  
  12. $numrows = mysql_num_rows($query);
  13.  
  14. if ($numrows!=0)
  15. {
  16. $_SESSION['zalogowany'] = true;
  17. $_SESSION['username'] = $_POST['username'];
  18. $_SESSION['password'] = $_POST['password'];
  19.  
  20. echo '<div id="message">Witamy '. $username .'. <a href="index.php">Powrót</a></div>';
  21.  
  22. } else
  23. die("Nie ma takiego użytkownika");
  24.  
  25. } else
  26. die("Nieprawidłowy użytkownik lub hasło");
  27.  
  28. mysql_close($connect)
  29. ?>


Będę wdzięczny za jakiekolwiek inne uwagi co do kodu.
Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
-Gość-
post
Post #2





Goście







MD5 (zwłaszcza bez soli) nie jest już bezpieczną metodą przechowywania haseł i już jej się nie powinno stosować. Najlepiej jakby hasło było przechowywane za pomocą SHA512 z solą unikalną dla każdego użytkownika. Można to zrealizować tak:

  1. hash_hmac('sha512', $password_plaintext, $salt);


ciąg ma długość 128 znaków, czyli musi być w polu char(128)

Logowanie wygląda tak, że zadajesz zapytanie select wyszukujące po nazwie użytkownika (nie możesz od razu sprawdzać hasła bo żeby je dobrze wygenerować musisz mieć salt).

1. Może się wydawać to nadmiarowe, ale jak ktoś przełamie zabezpieczenia (nawet nie poprzez Twój błąd tylko kogoś innego) i dostanie twoją bazę danych w swoje ręce to takie zabezpieczenie będzie się wydawać o wiele mniej nadmiarowe. W idealnym świecie każdy ma osobne hasło do każdego serwisu, a hasło jest złożone z losowych znaków o dużych i małych literach. W rzeczywistości hasła użytkowników są o wiele bardziej słownikowe.
2. To że hash jest taki długi, nie powoduje że jest znacząco wolniejszy.
Go to the top of the page
+Quote Post

Posty w temacie
- kropamk   [PHP]Szyfrowanie/hashowanie od podstaw   1.12.2011, 12:13:35
- - Bateria   rejestracja [PHP] pobierz, plaintext <?php// DE...   1.12.2011, 12:34:27
- - kropamk   Można zarejestrować użytkownika, ale przy logowani...   1.12.2011, 12:43:13
- - xsonic   W md5 chodzi o to żeby zaszyfrować jakiś tekst w t...   1.12.2011, 12:47:40
- - kropamk   czyli mam dodać do kodu md5 ? $query = mysql...   1.12.2011, 12:57:12
- - adam882   brakuje też walidacji przed sql_injection (np. mys...   1.12.2011, 13:09:32
- - kropamk   Poprawiłem tak kod logowania, nie pokazuje żadnego...   1.12.2011, 15:10:47
- - Bateria   Najpierw zaloguj się do bazy danych przez np. phpM...   2.12.2011, 07:38:59
- - nospor   Mysl troszeczkę co robisz... najpierw hasło hashuj...   2.12.2011, 07:54:46
|- - kropamk   Cytat(nospor @ 2.12.2011, 07:54:46 ) ...   2.12.2011, 09:01:57
- - nospor   Cytatnie rozumiem najpierw w mysql a potem mam wyw...   2.12.2011, 09:11:16
- - kropamk   powinienem pozostawić [PHP] pobierz, plaintext $q...   2.12.2011, 12:09:07
- - Bateria   W rejestracji wysyłasz hasło do bazy danych ale pr...   2.12.2011, 13:27:49
- - kropamk   Poprawki naniesione i czy nie mogę w ten sposób sp...   2.12.2011, 14:47:18
- - Bateria   Oczywiście że możesz a nawet było by wskazane. Jeż...   2.12.2011, 16:05:44
- - kropamk   @Bateria coś nadal jest nie tak z kodem w loginie ...   3.12.2011, 12:20:22
- - kadlub   jakiej wielkości masz pole w bazie danych w którym...   3.12.2011, 12:30:03
- - kropamk   var 20   3.12.2011, 12:39:50
- - kadlub   zmień na char (100)   3.12.2011, 12:40:46
- - kropamk   i to bylo to wszystko działa. Dziękuję za pomoc   3.12.2011, 12:44:54
- - nospor   Cytatzmień na char (100)Raczej na varchar(32) a je...   4.12.2011, 10:10:56
- - Gość   MD5 (zwłaszcza bez soli) nie jest już bezpieczną m...   4.12.2011, 19:16:57


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 Aktualny czas: 17.10.2025 - 05:08