Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> szyfrowanie logowania
TopGun
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 24.01.2007

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


No wiec zabralem sie za tworzenie skryptu logowania i mam maly zgrzyt. Otoz w bazie haslo koduje za pomoca password('haslo') i nijak nie wiem jak porownac to haslo z moim wpisanym oraz jak zakodowac haslo wpisywane w formularzu by siecia szlo juz zakodowane? Ponizej moj skrypcik.

  1. <?php
  2. include ("baza.inc");
  3. $sql_szukaj = "SELECT * FROM users WHERE login = 'admin' and pass = password('admin1234')";
  4. $res_szukaj= @mysql_query($sql_szukaj, $connection) or die("Zapytanie usera nieudane");
  5. if($res_szukaj)
  6. {
  7. $sql_dodaj_admina = "insert into users (login, pass, user, uprawnienia) values ("admin", password('admin1234'), "Administrator", "3")";
  8. $res_dodaj_admina= @mysql_query($sql_dodaj_admina, $connection);// or die("Zapytanie dodania admina nieudane");
  9. }
  10.  
  11. if(!(isset($_POST['login'])) && !(isset($_POST['haslo'])))
  12. {
  13. echo "<FORM action="index.php" method="post">
  14. Login:
  15. <input type="text" name="login" /><BR/>
  16. Hasło:
  17. <input type="password" name="haslo" /><BR/>
  18. <input type="submit" name="Zaloguj" /><BR/></FORM>";
  19. }
  20.  
  21. if(isset($_POST['login']) && isset($_POST['haslo']))
  22. {
  23. $login_porownaj=$_POST['login'];
  24. $haslo_porownaj=$_POST['haslo'];
  25. $haslo = crypt($haslo_porownaj);
  26. $sql_porownaj = "SELECT * FROM users WHERE login = 'jarek' ";
  27. $res_porownaj = @mysql_query($sql_porownaj, $connection) or die("Zapytanie porownania do bani");
  28. while ($row = mysql_fetch_array($res_porownaj))
  29. {
  30. $password = $row['pass'];
  31. echo "$password <BR>
  32. $haslo_porownaj<BR>
  33. $haslo<BR>";
  34. }
  35. if ($password == $haslo_porownaj)
  36. {
  37. echo "zalogowales sie";
  38. }
  39. else
  40. {
  41. echo "zle dane";
  42. }
  43. }
  44. ?>


niby funkcja crypt() po stronie php koduje hasla ale z tego co mi wyswietla to za kazdym razem jest inna wartosc. Jakas podpowiedz?

Ten post edytował TopGun 25.01.2007, 11:07:21
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
My4tic
post
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


1. Używaj odpowiednich tagów do wstawiania kodu na forum.
2. password() != crypt()
3. Nie używaj SQL'owego password()
4. Używaj funkcji mieszających - MD5, SHA1
5. Crypt() jest także funkcją mieszającą.
Go to the top of the page
+Quote Post
TopGun
post
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 24.01.2007

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


Dzieki za podpowiedz, uzylem wlasnie md5 i dziala mi to porownanie, lecz w jaki sposob zaszyfrowac formularz, by z niego haslo do serwera szlo zaszyfrowane a nie otwartym tekstem? Czy pozostaje mi tylko szyfrowanie strony przy pomocy ssl?
Go to the top of the page
+Quote Post
My4tic
post
Post #4





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


Mógłbyś zakodować hasło w MD5 po stronie klienta przy pomocy javascript'u i dopiero je wysyłać jednak moim zdaniem lepiej użyć SSL.

http://www.google.pl/search?q=md5+javascri...lient=firefox-a
Go to the top of the page
+Quote Post
TopGun
post
Post #5





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 24.01.2007

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


Na sieci znalazlem implementacje po stronie klienta w php:

  1. <?php 
  2. /* 
  3.  * sha-1.php 
  4.  * A php implementation of the Secure Hash Algorithm, SHA-1, based on 
  5.  * the JavaScript implementation by Paul Johnston. 
  6.  * This is basically a "translation from JavaScript to php, so most 
  7.  * of the credits should go to Paul Johnston. I only re-wrote it in php. 
  8.  * See <a href="http://pajhome.org.uk/site/legal.html" target="_blank">http://pajhome.org.uk/site/legal.html</a> for details. 
  9.  */ 
  10.  
  11. /* 
  12.  * Convert a 32-bit number to a hex string with ms-byte first 
  13.  */ 
  14. function hex($num) 
  15. { 
  16. $hex_chr = "0123456789abcdef"; 
  17. $str = ""; 
  18. for($j = 7; $j >= 0; $j--) 
  19. $str .= $hex_chr{(($num >> ($j * 4)) & 0x0F)}; 
  20. return $str; 
  21. } 
  22.  
  23. /* 
  24.  * Convert a string to a sequence of 16-word blocks, stored as an array. 
  25.  * Append padding bits and the length, as described in the SHA1 standard. 
  26.  */ 
  27. function str2blks_SHA1($str) 
  28. { 
  29. $nblk = ((strlen($str) + 8) >> 6) + 1; 
  30. for($i = 0; $i < $nblk * 16; $i++) $blks[$i] = 0; 
  31. for($i = 0; $i < strlen($str); $i++) 
  32. $blks[$i >> 2] |= ord($str{$i}) << (24 - ($i % 4) * 8); 
  33. $blks[$i >> 2] |= 0x80 << (24 - ($i % 4) * 8); 
  34. $blks[$nblk * 16 - 1] = strlen($str) * 8; 
  35. return $blks; 
  36. } 
  37.  
  38. /* 
  39.  * Bitwise rotate a 32-bit number to the left 
  40.  */ 
  41.  
  42. // zeroFill() is needed because php doesn't have a zero-fill 
  43. // right shift operator like JavaScript's >>> 
  44. function zeroFill($a, $b) 
  45. { 
  46. $z = hexdec(80000000); 
  47. if ($z & $a) 
  48. { 
  49. $a >>= 1; 
  50. $a &= (~$z); 
  51. $a |= 0x40000000; 
  52. $a >>= ($b-1); 
  53. } 
  54. else 
  55. { 
  56. $a >>= $b; 
  57. } 
  58. return $a; 
  59. } 
  60.  
  61. function rol($num, $cnt) 
  62. { 
  63. return ($num << $cnt) | (zeroFill($num, (32 - $cnt))); 
  64. } 
  65.  
  66. /* 
  67.  * Perform the appropriate triplet combination function for the current 
  68.  * iteration 
  69.  */ 
  70. function ft($t, $b, $c, $d) 
  71. { 
  72. if($t < 20) return ($b & $c) | ((~$b) & $d); 
  73. if($t < 40) return $b ^ $c ^ $d; 
  74. if($t < 60) return ($b & $c) | ($b & $d) | ($c & $d); 
  75. return $b ^ $c ^ $d; 
  76. } 
  77.  
  78. /* 
  79.  * Determine the appropriate additive constant for the current iteration 
  80.  */ 
  81. function kt($t) 
  82. { 
  83. return ($t < 20) ? 1518500249 : ( ($t < 40) ? 1859775393 : ( ($t < 60) ? -1894007588 : -899497514 ) ); 
  84. } 
  85.  
  86. /* 
  87.  * Take a string and return the hex representation of its SHA-1. 
  88.  */ 
  89. function calcSHA1($str) 
  90. { 
  91. $x = str2blks_SHA1($str); 
  92.  
  93. $a = 1732584193; 
  94. $b = -271733879; 
  95. $c = -1732584194; 
  96. $d = 271733878; 
  97. $e = -1009589776; 
  98.  
  99. for($i = 0; $i < count($x); $i += 16) 
  100. { 
  101. $olda = $a; 
  102. $oldb = $b; 
  103. $oldc = $c; 
  104. $oldd = $d; 
  105. $olde = $e; 
  106.  
  107. for($j = 0; $j < 80; $j++) 
  108. { 
  109. if($j < 16) $w[$j] = $x[$i + $j]; 
  110. else $w[$j] = rol($w[$j-3] ^ $w[$j-8] ^ $w[$j-14] ^ $w[$j-16], 1); 
  111.  
  112. $t = rol($a, 5) + ft($j, $b, $c, $d) + $e + $w[$j] + kt($j); 
  113. $e = $d; 
  114. $d = $c; 
  115. $c = rol($b, 30); 
  116. $b = $a; 
  117. $a = $t; 
  118. } 
  119.  
  120. $a += $olda; 
  121. $b += $oldb; 
  122. $c += $oldc; 
  123. $d += $oldd; 
  124. $e += $olde; 
  125. } 
  126. return hex($a) . hex($b) . hex($c) . hex($d) . hex($e); 
  127. } 
  128. ?>


I teraz pytanie: jak wykorzystac funkcje calcSHA1() w formularzu np. tego typu?

  1. <?php
  2. if(!(isset($_POST['login'])) && !(isset($_POST['haslo'])))
  3. {
  4. echo "<FORM action="index.php" method="post">
  5. Login:
  6. <input type="text" name="login" /><BR/>
  7. Hasło:
  8. <input type="password" name="haslo" /><BR/>
  9. <input type="submit" name="Zaloguj" /><BR/></FORM>";
  10. }
  11. ?>
Go to the top of the page
+Quote Post
maryaan
post
Post #6





Grupa: Zarejestrowani
Postów: 380
Pomógł: 2
Dołączył: 5.01.2007

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


powiedz mi jak chcesz zastosowac po stronie klienta cos co jest napisane (a dokladniej przepisane z js) w php ktore dziala po stronie serwera?
Go to the top of the page
+Quote Post
TopGun
post
Post #7





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 24.01.2007

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


Hmm...tez prawda (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Wiec pozostaje mi implementacja javascriptu albo sobie odpuscic (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




a ja zadam pytanie: czemu ma sluzyc hashowanie po stronie klienta?
Rozwazmy sytuacje: masz juz to hashowanie u klienta. Klient sie loguje, wysyla haslo shashowane. Siedzi sobie teraz taki hackier i nasluchuje co wysyla ludek. Przechwytuje shashowane haslo, zaraz potem wysyla identyczne rządanie logowania i mimo ze haslo bylo shashowane to i tak sie zaloguje. teraz moze robic na koncie klienta co dusza zapragnie.
Go to the top of the page
+Quote Post
My4tic
post
Post #9





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


Cytat(nospor @ 26.01.2007, 11:58:04 ) *
a ja zadam pytanie: czemu ma sluzyc hashowanie po stronie klienta?
Rozwazmy sytuacje: masz juz to hashowanie u klienta. Klient sie loguje, wysyla haslo shashowane. Siedzi sobie teraz taki hackier i nasluchuje co wysyla ludek. Przechwytuje shashowane haslo, zaraz potem wysyla identyczne rządanie logowania i mimo ze haslo bylo shashowane to i tak sie zaloguje. teraz moze robic na koncie klienta co dusza zapragnie.



...myślę, że jednak jest jakiś plus takiego rozwiązania jednak tak jak pisałem wcześniej - moim zdaniem nie warto się tym bawić. Załóżmy, że hacker sniffuje sieć i przechwytuje pakiety. Kiedy wysyłasz żądanie logowania hacker dostaje tylko hash - nie zna jawnego hasła co przy świadomości bezpieczeństwa użytkowników internetu jednak ma jakieś znaczenie - większość osób ma pewnie takie samo hasło na forum, takie samo do maila, serwera czy wielu innych. Przechwytując login i hasło wystarczy władować nick usera do google i pewnie znajdzie się jeszcze parę serwisów gdzie używa tego samego hasła. Wysyłając hash - zabezpieczasz się przed tym jednak po to jest SSH żeby go używac jeśli jest potrzebne.
Go to the top of the page
+Quote Post
nospor
post
Post #10





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




Cytat
większość osób ma pewnie takie samo hasło na forum, takie samo do maila, serwera czy wielu innych.
No to tylko w tej sytuacji, ze nie poznam hasla na inne konta. Ale na danym serwisie bede mogl szalec. Z drugiej strony jesli mowimy o takich ludkach, co to maja te same hasla na rozne serwisy, to i te hasla wowczas do "trudnych" nie naleza i znalezienie odpowiednika dla takiego hasha problemem nie bedzie.

podsumowujac: niepotrzebna zabawa, ale... no wlasnie: co kraj to obyczaj (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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: 22.08.2025 - 19:35