Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Strona Logowania
Forum PHP.pl > Forum > Przedszkole
ze4lot
Witam. Jestem raczkującym przedszkolakiem w PHP i dzisiejszego wieczoru spłodziłem mały ekran logowania. Byłbym bardzo wdzięczny za znalezienie jego wad dot. funkcjonalności i bezpieczenstwa oraz bardzo szczegółowe objaśnienie ich.

Oto mój kodzik:
  1. <?php
  2.  
  3. $body = "<head>
  4. <meta http-equiv=\"Content-type\" content=\"text/html; charset=iso-8859-2\">
  5. <meta http-equiv=\"Reply-to\" content=\"xxx\">
  6. <meta http-equiv=\"Content-Language\" content=\"pl\">
  7. <meta name=\"Author\" content=\"xxx\">
  8. <link rel=\"Stylesheet\" type=\"text/css\" href=\"style.css\">
  9. <title>xxx</title>
  10. </head>
  11. <br><br><br>
  12.  <center>";
  13.  
  14. if (isset($_POST["user"]) && isset($_POST["pass"]) && $_GET['do'] === "yes")
  15. {
  16. $user=trim($_POST['user']);
  17. $pass=md5(trim($_POST['pass']));
  18. $db = @mysql_connect("xxx", "xxx", "xxx") or die(mysql_error());
  19. @mysql_select_db("xxx");
  20. $login_info = mysql_query("SELECT * FROM user_list WHERE user = '$user'")
  21. or die(mysql_error());
  22. if (mysql_num_rows($login_info) != 1)
  23. {
  24. header("Refresh: 2; url=login.php");
  25. echo $body."<br><b>
  26. Nie ma takiego użytkownika!<br>
  27. ...Przeładowywanie formularza...</b>";
  28. }
  29. else
  30. {
  31. $login_info = mysql_fetch_array($login_info);
  32. unset($_POST['user']);
  33. unset($_POST['pass']);
  34. $new_sid = md5($_SERVER['REMOTE_ADDR']."".date(YmdHis));
  35.  
  36. if (($login_info['user'] == $user && $login_info['pass'] == $pass) || !$_COOKIE['sid'] || $_COOKIE['user'])
  37. {
  38. setcookie ("sid", $new_sid,time()+86400);
  39. setcookie ("user", $user,time()+86400);
  40. $_SESSION['sid'] = $new_sid;
  41. $log_update = mysql_query("UPDATE user_list SET sid = '".$new_sid."', ip = '".$_SERVER['REMOTE_ADDR']."' WHERE user = '".$user."'") or die(mysql_error());
  42. header("Refresh: 2; url=admin.php");
  43. echo $body."<br><b>
  44. Logowanie użytkownika <u>".$user."</u><br>
  45. ...Ładowanie panelu...</b>";
  46. }
  47. }
  48. }
  49. else if (isset($_COOKIE['sid']) || isset($_SESSION['sid']) || isset($_COOKIE['user']))
  50. {
  51. header("Refresh: 2; url=login.php");
  52. if (isset($_COOKIE['user']))
  53. {
  54. echo $body."<br>
  55.  <b>Czekaj, trwa czyszczenie niezakończonej sesji użytkownika <u>".$_COOKIE['user']."</u>...</b>";
  56. }
  57. else
  58. {
  59. echo $body."<br>
  60.  <b>...Czekaj, trwa przygotowywanie formularza...</b>";
  61. }
  62. setcookie ("user", "unknow",time()+(1*0.01));
  63. setcookie ("sid", "unknow",time()+(1*0.01));
  64. }
  65.  
  66. echo $body."
  67. <form action=\"login.php?do=yes\" method=\"POST\">
  68. <table>
  69. <tr>
  70. <td><b>Użytkownik:</b></td>
  71. <td><input type=\"text\" name=\"user\"></td>
  72. </tr>
  73. <tr>
  74. <td><b>Hasło:</b></td>
  75. <td><input type=\"password\" name=\"pass\"></td>
  76. </tr>
  77. <tr>
  78. <td colspan=\"2\"><center>
  79. <input type=\"submit\" value=\"loguj\">
  80. </center></td>
  81. </tr>
  82. </table>
  83. </center>
  84. </form>";
  85. ?>
kossa
Dziwne, ale masz:

Cytat
$login_info = mysql_query("SELECT * FROM user_list WHERE user = '$user'")


a nigdzie w całym skrypcie (ja przynajmniej nie zauważyłem) nie sprawdzasz hasła...

Dla bezpieczeństwa filtruj dane - htmlspecialchars" title="Zobacz w manualu PHP" target="_manual itp funkcje znajdziesz w manualu w see also jak zajrzysz na stronę o htmlspecialchars" title="Zobacz w manualu PHP" target="_manual

Pozytaj temat na forum o SQL Injection

Łukasz
ze4lot
Co do hasla to sie zgadza. Coś nieźle tam nakopałem ale już działa. Nie wyjaśniłem tego od razu ale w zapytaniach sql nazwy komórek i tabel są fikcyjne. Napisalem users by bylo wiadomo o co chodzi. W aktualnej wersji 'chamsko' za iXowalem itd.
@kossa - podaj mi prosze (albo ktoś inny) przykład jak można narozrabiać wykożystując SQL Injection bądz inne metody w moim skrypcie. Nie znam się na tyle jeszcze by się przed tym bronić, a poza tym nie wszystko na raz winksmiley.jpg

O to ulepszona wersja.

  1. <?php
  2. $loading = "<br><img src=\"images/spacer.gif\" width=\"2\" height=\"100\"><br>
  3. <mój ładny flash do loadingu ;)>
  4. </object>";
  5.  
  6. $body = "<head>
  7. ...
  8. </head>
  9. <br><br><br>
  10.  <center id=\"login\">";
  11.  
  12. if (isset($_POST["user"]) && isset($_POST["pass"]) && $_GET['do'] === "yes")
  13. {
  14. $user=htmlspecialchars(trim($_POST['user']), ENT_QUOTES);
  15. $pass=md5(htmlspecialchars(trim($_POST['pass']), ENT_QUOTES));
  16. $db = @mysql_connect("xxx", "xxx", "xxx") or die(mysql_error());
  17. @mysql_select_db("xxx");
  18. $login_info = mysql_query("SELECT * FROM xxx WHERE yyy = '$user'")
  19. or die(mysql_error());
  20. if (mysql_num_rows($login_info) != 1)
  21. {
  22. header("Refresh: 3; url=login.php");
  23. echo $body."<br><b>
  24. Nie ma takiego użytkownika lub podano błędne dane!<br>
  25. ...Przeładowywanie formularza...</b>".$loading;
  26. }
  27. else
  28. {
  29. $login_info = mysql_fetch_array($login_info);
  30. unset($_POST['user']);
  31. unset($_POST['pass']);
  32. $new_sid = md5($_SERVER['REMOTE_ADDR']."".date(YmdHis));
  33.  
  34. if (($login_info['user'] == $user && $login_info['pass'] == $pass))
  35. {
  36. setcookie ("sid", $new_sid,time()+86400);
  37. setcookie ("user", $user,time()+86400);
  38. $_SESSION['sid'] = $new_sid;
  39. $log_update = mysql_query("UPDATE xxx SET zzz = '".$new_sid."', zxc = '".$_SERVER['REMOTE_ADDR']."' WHERE yyy = '".$user."'") or die(mysql_error());
  40. header("Refresh: 3; url=admin.php");
  41. echo $body."<br><b>
  42. Logowanie użytkownika <div id=\"login\">".$user."</div>
  43. ...proszę czekać...</b>".$loading;
  44. } 
  45. else
  46. {
  47. header("Refresh: 4; url=login.php");
  48. echo $body."<br><b>
  49. Nie ma takiego użytkownika lub podano błędne dane!<br>
  50. ...Przeładowywanie formularza...</b>".$loading;
  51. }
  52. }
  53. }
  54. else if (isset($_COOKIE['sid']) || isset($_SESSION['sid']) || isset($_COOKIE['user']))
  55. {
  56. if($_COOKIE['sid'] === $_SESSION['sid'])
  57. {
  58. $db = @mysql_connect("xxx", "xxx", "xxx") or die(mysql_error());
  59. @mysql_select_db("jacek66_kafelek");
  60. $login_info = mysql_query("SELECT * FROM xxx WHERE yyy = '".$_COOKIE['user']."'")
  61. or die(mysql_error());
  62. if (mysql_num_rows($login_info) == 1)
  63. {
  64. $login_info = mysql_fetch_array($login_info);
  65. if ($_SESSION['sid'] === $login_info['sid'] )
  66. {
  67. if ($_GET['logout'] === "yes")
  68. {
  69. echo $body."<br>
  70. <b>Miłego dnia <div id=\"login\">".$_COOKIE['user']."</div><br>
  71. ...trwa wylogowywanie...</b>".$loading;
  72. header("Refresh: 3; url=index.php");
  73. setcookie ("user", "unknow",time()+(1*0.01));
  74. setcookie ("sid", "unknow",time()+(1*0.01));
  75. }
  76. echo $body."<br><b>
  77. Zalogowany użytkownik: <div id=\"login\">".$_COOKIE['user']."</div><br>
  78. <a id=\"login\" href=\"login.php?logout=yes\">Wyloguj.</a>
  79. <a id=\"login\" href=\"admin.php\">.Panel.</a>
  80. <a id=\"login\" href=\"index.php\">.Strona główna</a>
  81. </b>";
  82. }
  83. }
  84. }
  85. header("Refresh: 4; url=login.php");
  86. if (isset($_COOKIE['user']))
  87. {
  88. echo $body."<br>
  89. &nbsp;<b>Proszę czekać, trwa czyszczenie niezakończonej sesji użytkownika <div id=\"login\">".$_COOKIE['user']."</div>...</b><br><br>".$loading;
  90. }
  91. else
  92. {
  93. echo $body."<br>
  94. &nbsp;<b>Trwa przygotowywanie formularza<br>
  95. ...proszę czekać... </b><br><br>".$loading;
  96. }
  97. setcookie ("user", "unknow",time()+(1*0.01));
  98. setcookie ("sid", "unknow",time()+(1*0.01));
  99. }
  100.  
  101. echo $body."
  102. <form action=\"login.php?do=yes\" method=\"POST\">
  103. <table>
  104. <tr>
  105. <td><b>Użytkownik:</b></td>
  106. <td><input type=\"text\" name=\"user\"></td>
  107. </tr>
  108. <tr>
  109. <td><b>Hasło:</b></td>
  110. <td><input type=\"password\" name=\"pass\"></td>
  111. </tr>
  112. <tr>
  113. <td colspan=\"2\"><center>
  114. <input type=\"submit\" value=\"loguj\">
  115. </center></td>
  116. </tr>
  117. </table>
  118. </center>
  119. </form><br>";
  120. ?>


pracuje już nad kolejnym skryptem autoryzacji czy user jest zalogowany i czy wszystkie wymagania są spełnione (np. SID)
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.