Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Panel logowania
Forum PHP.pl > Forum > Przedszkole
Gość
Witam, zrobiłem panel i jak by ktoś biegły mógł go ocenić? Pod względem bezpieczeństwa głównie, nie ma to być niewiadomo jak bezpieczny no ale żeby go banalnym sposobem nie dało sie obejść.

Mile widziane jakieś poprawki... lub chociaż wytknięte co powinienem zmienić na coś.

Będę bardzo wdzięczny.

STRONA GŁÓWNA:
Kod odpowiada za ładowanie stron ( wiem tyle że muszę w nim dodać wykasowanie znaków / \ : . )
  1. <?php
  2.  
  3.  $page = @$_GET['page'];
  4.    require('./smarty/Smarty.class.php');
  5.  
  6.        if(!isset($page))
  7.        {
  8.             $page = 'news';
  9.     }
  10.        else
  11.        {
  12.          if(!file_exists($page.".php"))
  13.          {
  14.              $page = "news";    
  15.            }
  16.            else
  17.             {
  18.                $page = $_GET['page'];
  19.            }
  20.    }
  21.      include($page.".php");
  22.      
  23. ?>


Panel includowany na stronę główną:

  1. <?php
  2.  
  3.        $tpl = new Smarty;
  4.        $tpl -> template_dir = './templates/';
  5.        $tpl -> compile_dir = './templates_c/';
  6.  
  7.        
  8.        
  9.            if (@$_SESSION['zalogowany'] === true)
  10.            {
  11.                            $tpl -> assign('info', 'jestes zalogowany');
  12.                             $tpl -> display('zalogowany.tpl');
  13.            }
  14.            else
  15.            {
  16.                 $tpl -> display('login.tpl');
  17.            }
  18.  
  19. ?>


szablon panelu login.tpl:

  1. <form action="?page=zalogowany" method=POST>
  2. <div class="login">
  3. <div class="login_1">
  4. <INPUT type="text" name="nick" class="p_user"><br />
  5. <INPUT type="password" name="pass" class="p_pass">
  6. </div>
  7. <div class="login_2">
  8. <input onfocus="blur()" type="submit" value="" class="p_but" >
  9. </div>
  10. <div id="login_3"><a href="#">Przypomnij hasło</a> | <a href="#">Rejestracja</a></div>
  11. </div>
  12. </form>


strona zalogowany.php wczytywana po uruchomieniu formularza:

  1. <?php
  2.  
  3. try {
  4.        $pdo = new PDO('mysql:host=localhost; dbname=gcms', 'root', 'root');
  5.        $pdo -> setAttribute(PDOATTR_ERRMODE, PDOERRMODE_EXCEPTION);
  6.            
  7.        
  8.            if (isset($_POST['nick'])&&isset($_POST['pass']))
  9.            {
  10.                        $zapytanie =  $pdo -> query('SELECT nick, pass FROM users WHERE nick = "'.$_POST['nick'].'"  AND  pass = "'.$_POST['pass'].'"');
  11.                        $row = $zapytanie -> fetch();
  12.                                            
  13.                            if ($row['nick'] === $_POST['nick'] && $row['pass'] === $_POST['pass'])
  14.                                {
  15.                                                                $_SESSION['zalogowany'] = true;
  16.  
  17.                                    echo "<meta http-equiv=\"Refresh\" content=\"0; url=index.php\" />";
  18.  
  19.                                
  20.                                $zapytanie -> closeCursor();
  21.                                }
  22.                                
  23.                            else
  24.                                {
  25.                                        echo "Zły login lub hasło!";
  26.                                }
  27.        
  28.            }
  29.            
  30. else
  31.                                {
  32.                                        echo "Zły login lub hasło!";
  33.            }
  34.        
  35.    
  36.    }
  37.    
  38. catch(PDOException $e)
  39.    {
  40.        echo "blad".$e->getMessage();
  41.    }
  42.    
  43.    
  44.                                
  45.                                
  46. ?>


strona wyloguj.php:

  1. <?php
  2.  
  3.    echo "<meta http-equiv=\"Refresh\" content=\"0; url=index.php\" />";
  4.                                
  5.                                
  6. ?>


Mało praktyczne jest to że stronę po zalogowaniu jak i wylogowaniu muszę odświeżyć bo inaczej nie wczytuję / kasuję się panel... ale nie miałem innego pomysłu na załatwienie tej sprawy



Jeśli ktoś znajdzie chwilkę i chęci to proszę o pomoc, bo nie mam innego sposobu na sprawdzenie bezpieczeństwa i praktyczności tego panelu
Shili
  1. <?php
  2. include($page.".php");
  3. ?>


A jak wywołam adres: index.php?page=../../admin/kasuj?
Oczywiście określenie pliku jest wyssane z palca, ale w takiej formie pozwalasz mi includować wszystko jak leci.

Po drugie nie opierałabym się na samej zmiennej sesyjnej, ale również na innych sprawdzeniach (sygnatura przeglądarki na przykład).

W ogóle nie widzę session_start();
Wylogowanie zrobiłabym tylko i wyłącznie po stwierdzeniu, że user jest zalogowany, w przeciwnym przypadku wyświetliłabym komunikat, że nie jest się zalogowanym. Osobiście uważam, że jest to bardziej profesjonalne, zamiast przyjmować wszystko jak leci.

To tak na szybko.
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.