Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Panel logowania - lepsze rozwiązanie ...
Forum PHP.pl > Forum > PHP
d4ng
Witam serdecznie, na podstawie jednego z kursów php udało mi się zrobić prosty panel logowania jednak ma on swoje wady które chciałbym wyeliminować... A więc... stworzyłem plik index.php w którym mamy formularz oraz prostą instrukcje warunkową. Po jej spełnieniu przenosi mnie na content.php. Zrobiłem również plik logout który ma za zadanie przenieść mnie do index.php. Fajnie że się loguje i wylogowuje jednak do panelu można się dostać np podając w adresie /content.php... Chiałbym to jakoś zabezpieczyć tak żeby jedyną droga dostania się było podanie prawidłowego loginu i hasła oraz przydało by się jakies ograniczenie czasowe - np po 5 minutach admin sam się wylogowuje. Dodam tylko że dopiero raczkuje w php ale chętnie się uczę smile.gif Proszę Was o jakieś pomysły, przykłady, rozwiązania... Z góry dziekuje i życze wszystkim zdrowych i spokojnych świąt smile.gif


index.php
  1. <?php ob_start(); ?>
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <meta charset="utf-8">
  6. <title>Baza klientów</title>
  7. <link rel=stylesheet href="style.css">
  8. <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300' rel='stylesheet' type='text/css'>
  9. <script src="http://code.jquery.com/jquery.min.js"></script>
  10. <!--[if lt IE 9]>
  11. <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  12. <![endif]-->
  13. </head>
  14. <body>
  15. <div id="kontener_admin">
  16.  
  17. <div id="admin">
  18. <form method="POST" action="">
  19.  
  20. <fieldset>
  21.  
  22. <legend>Zaloguj się do bazy</legend><br />
  23.  
  24. <label>Login: </label><input type="text" name="username" value="" /><br />
  25. <label>Hasło: </label><input type="password" name="password" value="" /><br />
  26. <input type="submit" value="Prześlij" class="btn" />
  27.  
  28. </fieldset>
  29.  
  30. <input type="hidden" name="checker" value="1" />
  31. </form>
  32.  
  33. <?php
  34.  
  35. define("LOGIN","admin");
  36. define("PASSWORD","xsw21qaz");
  37.  
  38. if(isset($_POST['checker'])){
  39.  
  40. if(($_POST['username'] == LOGIN) && ($_POST['password'] === PASSWORD)){
  41. $_SESSION['logged'] = true;
  42. $_SESSION['login'] = $_POST['username'];
  43. header("Location: content.php", true);
  44. } else {
  45. echo "<br /><center><p style=\"color:red\">Zły login lub hasło!</p></center>";
  46. }
  47. }
  48. ?>
  49. </div>
  50. </div>
  51. </body>
  52. </html>
  53. <?php ob_end_flush(); ?>


content.php
  1. <?php session_start(); ?>
  2. <?php require_once("db.php"); ?>
  3. <?php require_once("header.php"); ?>
  4. <?php require_once("sidebar.php"); ?>
  5. <?php
  6.  
  7. ?>
  8. <div id="main">
  9. <?php
  10. $lista = "SELECT * FROM klienci";
  11. $wynik = mysql_query($lista);
  12. echo '<table cellpadding="0" border="1">';
  13. while ($row = mysql_fetch_array($wynik)) {
  14. echo '<tr><td>' . $row["id"] . '</td><td>' . $row["nazwa"] . '</td><td>' . $row["email"] . '</td><td>' . $row["telefon"] . '</td><td>' . $row["dzielnica"] . '</td><td>' . $row["ulubione"] . '</td></tr>';
  15. }
  16. echo '</table>';
  17.  
  18. ?>
  19. </div>
  20.  
  21. <?php mysql_close($sql_conn); ?>
  22.  
  23.  
  24. <?php require_once("footer.php"); ?>


logout.php
  1. <?php
  2.  
  3. if(isset($_SESSION['logged']) && (!empty($_SESSION['login']))) {
  4. header("Location: index.php", true);
  5.  
  6. } else {
  7. echo "<h1>zooonk! :)</h1>";
  8. }
  9. ?>


Ps. jeżeli widzicie jakieś rażące babole bezpieczeństwa itp to bardzo proszę o uwagi
Damonsson
Linijki 11-14

  1. <?php session_start(); ?>
  2.  
  3. <?php require_once("db.php"); ?>
  4.  
  5. <?php require_once("header.php"); ?>
  6.  
  7. <?php require_once("sidebar.php"); ?>
  8.  
  9. <?php
  10.  
  11. if(!isset($_SESSION['logged']) || $_SESSION['logged'] !== true) { //jeśli zmienna sesyjna logged nie istnieje, albo istnieje ale nie równa się true (co robisz w index.php:42)
  12. header('Location: index.php'); // to przenieś usera na index.php
  13. die; // i upewnij się, że nic już się tutaj nie wykona
  14. }
  15.  
  16. ?>
  17.  
  18. <div id="main">
  19.  
  20. <?php
  21.  
  22.  
  23.  
  24. $lista = "SELECT * FROM klienci";
  25.  
  26. $wynik = mysql_query($lista);
  27.  
  28. echo '<table cellpadding="0" border="1">';
  29.  
  30. while ($row = mysql_fetch_array($wynik)) {
  31.  
  32. echo '<tr><td>' . $row["id"] . '</td><td>' . $row["nazwa"] . '</td><td>' . $row["email"] . '</td><td>' . $row["telefon"] . '</td><td>' . $row["dzielnica"] . '</td><td>' . $row["ulubione"] . '</td></tr>';
  33.  
  34. }
  35.  
  36. echo '</table>';
  37.  
  38.  
  39.  
  40. ?>
  41.  
  42. </div>
  43.  
  44.  
  45.  
  46. <?php mysql_close($sql_conn); ?>
  47.  
  48.  
  49.  
  50.  
  51.  
  52. <?php require_once("footer.php"); ?>
d4ng
heh no jasne wink.gif ale pytanie czy możemy to jeszcze jakoś dopracować? myślę tu o jakimś time out? oraz czy na pewno nie da się wejść na strone bez loginu i hasła? Co np. z atakiem przez wpisanie odpowiedniego kodu php w formularz? Czym mogę to jakoś zabezpieczyć? Ps. aby google nie indexował tej strony wystarczy stworzyć robots.txt ale czy warto zrobić coś jeszcze? Jeszcze raz dziękuje za pomoc i czekam na Wasze pomysły wink.gif

Damonsson
Session timeout http://stackoverflow.com/questions/3068744...session-timeout

Zawsze się da wejść.
Tutaj możesz być narażony na brute-force i ewentualnie http://en.wikipedia.org/wiki/Timing_attack

Ale jeśli nie trzymasz tam nagich zdjęć żony, to komu by się chciało?

Przy porównywaniu Stringów używaj ===, a nie ==
d4ng
Super wink.gif wracając tylko do tematu poruszania sie po stronie to mam plik np db.php w którym przechowuje $sql_conn = mysql_connect(); itp i do niego też mogę wejść przez przeglądarkę.. oczywiście jest pustra strona, ale nie chciałbym aby strona się wyświetlała... czy teraz dla każdej podstrony mam zastosować

  1. if(!isset($_SESSION['logged']) || $_SESSION['logged'] !== true) { //jeśli zmienna sesyjna logged nie istnieje, albo istnieje ale nie równa się true (co robisz w index.php:42)
  2. header('Location: index.php'); // to przenieś usera na index.php
  3. die; // i upewnij się, że nic już się tutaj nie wykona
  4. }


czy mogę to jakoś inaczej ograniczyć ? oraz czy
  1. <?php require_once("db.php"); ?> i <?php mysql_close($sql_conn); ?>


są poprawnie osadzone... i ma to ręce i nogi czy coś byś zmienił?

Pozdrawiam i jeszcze raz dziekuje wink.gif

Damonsson
W folderze, gdzie masz wrażliwe pliki możesz zrobić .htaccess i deny from all - poczytaj sobie o tym, co i jak.

No skoro bawisz się w strukturalne php, to może być. Ale przyszłościowo to MVC, OOP PHP, PDO i te sprawy.
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.