Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]bezpieczenstwo logowania na sesjach
Forum PHP.pl > Forum > Przedszkole
Majzel
  1. <?php
  2. /**********
  3. Skrypt logowania
  4. ***********/
  5. $login = htmlspecialchars($_POST['login']);
  6. $haslo = htmlspecialchars($_POST['haslo']);
  7. function polacz() //łączenie z bazą danych
  8. {
  9. $poloczenie = new mysqli('X', 'X', 'X', 'X');
  10. $poloczenie->query("Set NAMES latin2");
  11.  if(!$poloczenie)
  12. echo 'Błąd połączenie z bazą danych, przepraszamy za utrudnienia!'.mysqli_connect_error;
  13. $poloczenie->AUTOCOMMIT(TRUE);
  14.  return $poloczenie;
  15. }
  16. ?>
  17.  
  18. <?php
  19. function zakoncz_polacz() {
  20. $poloczenie->close();
  21. }
  22. ?>
  23.  
  24. <?php
  25. function loguj($login, $haslo) { //logowanie
  26. $lacz = polacz();
  27. $wynik = $lacz->query("select * from admin where login='$login' and haslo=sha1('$haslo')");
  28. if (!$wynik)
  29. echo 'Nie odnaleziono tego użytkownika w bazie danych, zaloguj się ponownie';
  30. if ($wynik->num_rows>0)
  31. return true;
  32. else
  33. echo 'Logowanie nie powiodło się';
  34. }
  35.  
  36. ?>
  37. <?php
  38. function sprawdzenie_danych() {
  39. if (isset($_SESSION['admin']))
  40.  echo 'Zalogowano jako: '.$_SESSION['admin'];
  41.  }
  42. ?>
  43.  
  44. <?php //właściwa część skryptu
  45. loguj($login, $haslo);
  46. $_SESSION['admin'] = $_POST['login'];
  47. sprawdzenie_danych();
  48. ?>


i mam pytania odnośnie powyższego kodu.
Po co tak właścwie są te sesje w logowaniu? Co mi to daje? np to:
  1. <?php
  2. if (isset($_SESSION['admin']))
  3.  echo 'Zalogowano jako: '.$_SESSION['admin'];
  4.  }
  5. ?>


Oraz, czy powyższy skrypt jest bezpieczny? Jak go ulepszyć?
Pride
session" title="Zobacz w manualu PHP" target="_manual - właśnie po to one są smile.gif
Shili
Cytat
Oraz, czy powyższy skrypt jest bezpieczny? Jak go ulepszyć?
Na przykład przez session_regenerate_id()

I nieustawianie takiego cuda bez warunku
  1. <?php
  2. $_SESSION['admin'] = $_POST['login'];
  3. ?>

Na razie bowiem jeśli to wygląda tak jak napisałeś nie masz żadnego zabezpieczenia, zawsze zaloguje.

Cytat
Po co tak właścwie są te sesje w logowaniu? Co mi to daje? np to:
Możliwość przechowywania danych o użytkowniku w wygodny i dość bezpieczny sposób po stronie serwera?
Majzel
dzięki. Ale nie wiem jak zabezpieczyć tą sesję tzn no bo nie wiem czy to będzie ok?:
  1. <?php //właściwa część skryptu
  2. loguj($login, $haslo);
  3. if ($wynik->num_rows>0) {
  4. $_SESSION['admin'] = $_POST['login'];
  5. }
  6. sprawdzenie_danych();
  7. ?>

ale po co ten kod skoro w tej funkcji loguj też mam:
  1. <?php
  2. if ($wynik->num_rows>0)
  3. return true;
  4. ?>


W taki razie po co drugi raz to samo? Może się mylę, nie wiem?
Shili
Nie drugi raz to samo, prześledz sobie swój dziurawy do tej pory kod.

  1. <?php
  2. loguj($login, $haslo);
  3. $_SESSION['admin'] = $_POST['login'];
  4. sprawdzenie_danych();
  5. ?>


Wywołujesz funkcję, która sprawdza login i hasło, zwraca true albo false, które możesz wsadzić aktualnie komukolwiek we wrażliwą część część ciała (o ile go nie lubisz oczywiście ^^), bo funkcja równie dobrze mogłaby nie zwracać zupełnie nic i skrypt działałby dokładnie tak samo.

Alternatywa:
  1. <?php
  2. if(loguj($login, $haslo) === true) {
  3. // kod który ma być wykonywany po podaniu poprawnych danych
  4. }
  5. ?>


Widzisz różnicę? W pierwszym nigdzie nie sprawdzasz co zwraca funkcja. Po prostu ją wykonujesz i przestaje Cię interesować jej wynik - tak to wygląda z kodu. W drugim podanym przeze mnie sprawdza się, co funkcja zwraca - jeśli zwróci true można ustawić zmienną sesyjną.
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.