Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Panel logowania - czy skrypt jest bezpieczny
Forum PHP.pl > Forum > PHP
bigos1995-95
Witam, napisałem skrypt panelu logowania, chciałbym zapytać was czy skrypt jest bezpieczny czy może powinienem dodać jeszcze jakieś zabezpieczenia, z góry dzieki za opinie wink.gif

  1. <?php
  2. echo '<h3>Panel logowania</h3>';
  3.  
  4. if(isset($_POST['iduzytkownika']) && isset($_POST['haslo']))
  5. {
  6. // jeżeli użytkownik właśnie podjął próbę zalogowania
  7. $iduzytkownika = $_POST['iduzytkownika'];
  8. $haslo = $_POST['haslo'];
  9.  
  10. $bd_lacz = new mysqli('xxxxxx', 'xxxxxx', 'xxxxxx', 'xxxxxxxx');
  11.  
  12. if (mysqli_connect_errno()) {
  13. echo 'Połączenie z bazą danych nie powiodło się: '.mysqli_connect_error();
  14. exit();
  15. }
  16.  
  17. $iduzytkownika = addslashes($iduzytkownika);
  18. $haslo = addslashes($haslo);
  19. }
  20.  
  21. $zapytanie = 'select * from uwierzytelnieni_uzytkownicy '
  22. ."where uzytkownik='$iduzytkownika' "
  23. ." and haslo=sha1('$haslo')";
  24.  
  25. $wynik = $bd_lacz->query($zapytanie);
  26. if($wynik->num_rows > 0)
  27. {
  28. // jeżeli dane są w bazie zarejestrowanie identyfikatora użytkownika
  29. $_SESSION['prawid_uzyt'] = $iduzytkownika;
  30. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  31. }
  32. $bd_lacz->close();
  33. }
  34. if(isset($_SESSION['prawid_uzyt']))
  35. {
  36. echo 'Użytkownik zalogowany jako: '.$_SESSION['prawid_uzyt'].'<br />';
  37. echo '<a href="wylog.php">Wyloguj</a><br />';
  38. if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR'])
  39. {
  40. die('Proba przejecia sesji udaremniona!');
  41. }
  42. }
  43. else
  44. {
  45. if(isset($iduzytkownika))
  46. {
  47. // jeżeli próba logowania była nieudana
  48. echo 'Zalogowanie niemożliwe.<br />';
  49. }
  50. else
  51. {
  52. // nie było próby logowania lub nastąpiło wylogowanie
  53. echo 'Użytkownik niezalogowany.<br />';
  54. }
  55.  
  56. // tworzenie formularza logowania
  57. echo '<form method="post" action="xxxxxx.php">';
  58. echo '<table>';
  59. echo '<tr><td>Użytkownik:</td>';
  60. echo '<td><input type="text" name="iduzytkownika"></td></tr>';
  61. echo '<tr><td>Hasło:</td>';
  62. echo '<td><input type="password" name="haslo"></td></tr>';
  63. echo '<tr><td colspan="2" align="center">';
  64. echo '<input type="submit" value="Logowanie"></td></tr>';
  65. echo '</table></form>';
  66. }
  67. ?>
nospor
Skad wy bierzecie te addslashes?
To escapowania danych dla mysql uzywa mysql_escape_string a nie addslashes.
A najlepiej przerzuć się na PDO
bigos1995-95
Czyli
  1. $iduzytkownika = mysql_escape_string($iduzytkownika);
  2. $haslo = mysql_escape_string($haslo);
  3. }


a reszte jest git ?


addslashes w książce miałem
com
Skoro korzystasz z mysqli to mysqli_real_escape_string() musisz użyć, ale tak jak nospor powiedział lepiej skorzystaj z PDO smile.gif
nospor
NIe zwróciłem uwagi że to mysqli_. Skorzystaj z poprawki co ci napisał @com.

A jak ci w książce każą dane do bazy przepuszcać przez addslashes to wywal tę książke szybko na śmietnik....
Sephirus
Popieram przedmówców co do PDO - bo samo zabezpiecza dane gdy je "bindujemy" i jest bardziej czytelne i równie łatwe w obsłudze a po chwili nawet wyda Ci się wygodniejsze.

Co do samego skryptu - nie ma bezpiecznego skryptu, który ma jakąś interakcję z użytkownikiem a co do Twojego:

  1. $zapytanie = 'select * from uwierzytelnieni_uzytkownicy '
  2. ."where uzytkownik='$iduzytkownika' "
  3. ." and haslo=sha1('$haslo')"; // nie brakuje tu cudzysłowów? - to raz a dwa dowiedz się czym jest SALT


co do tego addslashes - PDO rozwiązuje problem.

Podoba mi się proste a skuteczne zabezpieczenie na IP - pamiętaj jedynie o tych co mają dynamiczne - jak rozłączy im net albo korzystają z GSM to będzie ich to zabezpieczenie mocno wkurzało - taki OT.

Poza tym, po tym co widuje się w necie jako "bezpieczne skrypty rejestracji i logowania" ten Twój jak na poziom początkujący jest dobry (poza tym co wspominaliśmy).
bigos1995-95
Dzięki wielkie, zastosuje się do rad smile.gif
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.