Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]bezpieczeństwo bazy danych
Forum PHP.pl > Forum > Przedszkole
brychu
Stworzyłem stronę btr.esy.es
Jestem początkujący, więc jest ona prymitywna. Polega na sesji i bazy danych.
Moje pytanie. Czy ktoś może spróbować zalogować się na moją stronę bez wiedzy, jakie mam hasło?
Login: Darksider
Celowo go udostępniam, ponieważ ewentualny intruz znałyby je.
Jeśli komuś się uda proszę o wytłumaczenie w jaki sposób dostał się "do środka" i w jaki sposób mogę jeszcze zabezpieczyć stronę.
nospor
Pokaz kod logowania
brychu
Nie jest to mój skrypt. Uczę się w ten sposób, że studiuje gotowe rozwiązania, dziele na części pierwsze i analizuje.

  1. <?php
  2. /**
  3.  * Formularz oraz skrypt logowania
  4.  * @author Sobak
  5.  * @package User System
  6.  */
  7.  
  8. require 'header.php'; // Dołącz początkowy kod HTML
  9. require 'config.php'; // Dołącz plik konfiguracyjny i połączenie z bazą
  10.  
  11. /**
  12.  * SKRYPT LOGOWANIA
  13.  */
  14. require_once 'user.class.php'; // Dołączamy rdzeń systemu użytkowników
  15.  
  16. // Zabezpiecz zmienne odebrane z formularza, przed atakami SQL Injection
  17. $login = htmlspecialchars(mysql_real_escape_string($_POST['login']));
  18. $pass = mysql_real_escape_string($_POST['pass']);
  19.  
  20. if ($_POST['send'] == 1) {
  21. // Sprawdź, czy wszystkie pola zostały uzupełnione
  22. if (!$login or empty($login)) {
  23. die ('<p class="error">Wypełnij pole z loginem!</p>');
  24. }
  25.  
  26. if (!$pass or empty($pass)) {
  27. die ('<p class="error">Wypełnij pole z hasłem!</p>');
  28. }
  29.  
  30. $pass = user::passSalter($pass); // Posól i zahashuj hasło
  31.  
  32. // Sprawdź, czy użytkownik o podanym loginie i haśle isnieje w bazie danych
  33. $userExists = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users WHERE login = '$login' AND pass = '$pass'"));
  34.  
  35. if ($userExists[0] == 0) {
  36. // Użytkownik nie istnieje w bazie
  37. echo '<p class="error">Użytkownik o podanym loginie i haśle nie istnieje.</p>';
  38. }
  39.  
  40. else {
  41. // Użytkownik istnieje
  42. $user = user::getData($login, $pass); // Pobierz dane użytknika do tablicy i zapisz ją do zmiennej $user
  43.  
  44. // Przypisz pobrane dane do sesji
  45. $_SESSION['login'] = $login;
  46. $_SESSION['pass'] = $pass;
  47.  
  48. echo "
  49. <center>
  50. <A HREF=\"m42njfsjhd73j2pfksjdfu2939e.html\"
  51. onMouseOver='rollover.src=\"button2.gif\"'
  52. onMouseOut='rollover.src=\"button.gif\"'>
  53. <img src=\"button.gif\" name=\"rollover\" border=\"0\"></A>
  54. </center>
  55. ";
  56. }
  57. }
  58.  
  59. else {
  60. /**
  61.   * FORMULARZ LOGOWANIA
  62.   */
  63. ?>
  64. <font color="white">
  65. <center>
  66. <form method="post" action="">
  67. <label for="login">Login:</label>
  68. <input type="text" name="login" maxlength="32" id="login" />
  69.  
  70. <label for="pass">Hasło:</label>
  71. <input type="password" name="pass" maxlength="32" id="pass" /><br />
  72.  
  73. <input type="hidden" name="send" value="1" />
  74. <input type="submit" value="Zaloguj" />
  75. </form>
  76. </center>
  77.  
  78. <?php
  79. }
  80. ?>
viking
Funkcje mysql są przestarzałe i straciły wsparcie. Zamień je na pdo albo mysqli. Do weryfikacji hasła używaj password_hash i verify. W linii 31 jest stala?
Poza tym cały ten formularz wygląda jak za czasów html4. Widać ze kod jest bardzo stary i co najwyżej jest how to jak teraz nie pisać.
Boshi
Ten skrypt nie nadaje się na dzisiejsze czasy. PDO+ bindowanie a nie jakieś funkcje eskejpujące, do haszowania używamy tego co pisał viking, password_hash o password_verify , solić nie trzeba bo jest włączona domyślnie sól.
brychu
Ok. Dziękuję Panowie. Zabieram się do nauki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.