Próbowałem zrobić efekt logowania się do PHP-Fusion bez użycia pliku setuser.php
i doszedłem do takiego kodu:

Plik user_info_panel.php
  1. <?php
  2. if (iMEMBER) {
  3. echo "<!-- POCZATEK: MENU 2: panel logowania -->
  4. <div class=\"menu1styl\">
  5. <img src=\"images/kategorie/logowanie.jpg\" alt=\"\" /><br />
  6. <div class=\"menu1styl2log\">
  7. Zalogowany jako <b>".$userdata['user_name']."</b><br />
  8. <a href=\"".BASEDIR."edytuj_profil.php\" class=\"link2\">Edytuj profil</a>
  9. <a href=\"".BASEDIR."index.php?wyloguj=tak\" class=\"link2\">Wyloguj</a>
  10. </div>
  11. </div>
  12. <!-- KONIEC: MENU 2: panel logowania -->";
  13. } else {
  14. echo "<!-- POCZATEK: MENU 2: panel logowania -->
  15. <div class=\"menu1styl\">
  16. <img src=\"images/kategorie/logowanie.jpg\" alt=\"\" /><br />
  17. <div class=\"menu1styl2log\">";
  18. if(!isset($blad)) { $blad = ""; }
  19. echo "<p>".$blad."</p>
  20. <form action=\"".FUSION_SELF."\" method=\"post\">
  21. <p>
  22. Nazwa użytkownika:<br />
  23. <input name=\"user_name\" type=\"text\" id=\"user_name\" /><br />
  24. Hasło:<br />
  25. <input name=\"user_pass\" type=\"password\" id=\"user_pass\" /><br /><br />
  26.  <input name=\"login\" type=\"submit\" class=\"zaloguj\" value=\"\" />
  27. </p>
  28. </form>
  29.  
  30. <a href=\"rejestracja.php\" class=\"link2\">Rejestracja</a>
  31. <a href=\"zapomniane_haslo.php\" class=\"link2\">Zapomniane hasło?</a>
  32. </div>
  33. </div>
  34. <!-- KONIEC: MENU 2: panel logowania -->";
  35. }
  36. ?>



Pliku setuser.php nie ma - usunięty.


Oraz zmodyfikowany plik maincore.php:

  1. <?php 
  2. if (isset($_POST['login'])) {
  3. $user_pass = md5($_POST['user_pass']);
  4. $user_name = preg_replace(array("/=/","/#/","/sORs/"), "", stripinput($_POST['user_name']));
  5. $result = dbquery("SELECT * FROM ".$db_prefix."users WHERE user_name='$user_name' AND (user_password='".md5($user_pass)."' OR user_password='$user_pass')");
  6.  
  7. if (dbrows($result) != 0) {
  8. $data = dbarray($result);
  9. if ($data['user_password'] == $user_pass) {
  10. $result = dbquery("UPDATE ".$db_prefix."users SET user_password='".md5($user_pass)."' WHERE user_id='".$data['user_id']."'");
  11. }
  12. $cookie_value = $data['user_id'].".".$user_pass;
  13. if ($data['user_status'] == 0) {
  14. $cookie_exp = isset($_POST['remember_me']) ? time() + 3600*24*30 : time() + 3600*3;
  15. header("P3P: CP='NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM'");
  16. setcookie("fusion_user", $cookie_value, $cookie_exp, "/", "", "0");
  17.  
  18. if (isset($_COOKIE['fusion_user'])) {
  19. $cookie_vars = explode(".", $_COOKIE['fusion_user']);
  20. $user_pass = (preg_match("/^[0-9a-z]{32}$/", $cookie_vars['1']) ? $cookie_vars['1'] : "");
  21. $user_name = preg_replace(array("/=/","/#/","/sORs/"), "", stripinput($user));
  22. if (!dbcount("(user_id)", "users", "user_name='".$user_name."' AND user_password='".md5($user_pass)."'")) {
  23. $blad = "<b>Nieprawidłowy Nick lub Hasło.</b>";
  24. header("Location: $HTTP_REFERER");
  25. } else {
  26. $result = dbquery("DELETE FROM ".$db_prefix."online WHERE online_user='0' AND online_ip='".USER_IP."'");
  27. header("Location: $HTTP_REFERER");
  28. }
  29. }
  30.  
  31. header("Location: $HTTP_REFERER");
  32. } elseif ($data['user_status'] == 1) {
  33. $blad = "<b>To konto jest podejrzane</b>";
  34. } elseif ($data['user_status'] == 2) {
  35. $blad = "<b>To konto nie zostało aktywowane.</b>";
  36. }
  37. } else {
  38. $blad = "<b>Nieprawidłowy Nick lub Hasło.</b>";
  39. }
  40. }
  41.  
  42. if (isset($_REQUEST['wyloguj']) && $_REQUEST['wyloguj'] == "tak") {
  43. header("P3P: CP='NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM'");
  44. setcookie("fusion_user", "", time() - 7200, "/", "", "0");
  45. setcookie("fusion_lastvisit", "", time() - 7200, "/", "", "0");
  46. $result = dbquery("DELETE FROM ".$db_prefix."online WHERE online_ip='".USER_IP."'");
  47. header("Location: $HTTP_REFERER");
  48. }
  49. ?>



I oto moje pytanie - czy takie logowanie jest nadal bezpieczne?