Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] System logowania - sesje, Prosze o opinie
pablo2
post 18.11.2007, 14:15:17
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 18.11.2007

Ostrzeżenie: (0%)
-----


Witam serdecznie (o moj pierwszy post na forum),

Chcialbym prosic o opinie uzytkownikow na temat skryptu logowania, ktory niedawno napisalem (zalozenie bylo takie, ze calosc ma byc w jednym pliku)

Kod
<?php
  
       error_reporting(E_ALL);
      
       session_start();
  
       if (!isset($_SESSION['initiated'])) {       // Sprawdzam czy gosc ma juz rozpoczeta sesje
           session_regenerate_id();                // Generuje nowy SSESID - unikam prostych 'Session fixation'
           $_SESSION['initiated'] = 1;             // Teraz juz na pewno jest sesja        
           $_SESSION['logged_in'] = 0;             // Gosc nie jest zalogowany
       }
      
       if ($_SESSION['logged_in'] == 1) {          // (*) Gosc jest zalogowany pokaz mu zasoby docelowe
           echo ('42 - The answer to the Ultimate Question of Life, the Universe, and Everything');   // zasob docelowy
       }
       else {                                      // Gosc nie jest zalogowany
           if(isset($_POST['submit_check'])) {     // Gosc wyslal formularz
          
               $login = strip_tags($_POST['login']);
               $password = strip_tags($_POST['password']);
          
               if(check_login($login, $password)) {                         // Gosc podal poprawne dane
                   session_regenerate_id(TRUE);                            // Generuje nowy SSESID i usuwa stary (!) - unikam 'Session fixation'
                   $_SESSION['logged_in'] = 1;                             // Gosc jest zalogowany
                   header("Location: login.php");                          // Odswiezam strone zeby gosc mogl zobaczyc to co jest pod (*)
               }
               else {                                                      // Gosc podal dane niepoprawne
                   echo ('Error! ');
                   echo ('<a href="login.php">Zaloguj jeszcze raz</a>');
               }              
           }
           else {                                                          // Gosc nie wyslal formularza
               echo ('<form enctype="multipart/form-data" method="post" action="login.php">
                   <input type="hidden" name="submit_check" value="1"/>
                   <input name="login" />
                   <input name="password" />
                   <input type="submit" value="Log in" />
               </form>');
           }
       }
      
  
       function check_login($login, $password) {                           // Oczywiscie tutaj normalnie jest bardziej
           if($login == 'adam' && $password == 'brawo') {                  // zawily skrypt wyciagajacy dane z bazy
               return TRUE;
           }
           else {  
               return FALSE;
           }
       }
  
   ?>


Uprzejmie prosze o komentarze - najbardziej zalezy mi na krytycznych. Chodzi mi glownie o zabezpieczenie przed atakami typu Session Fixation i Session Hijacking.

Z gory dziekuje za uwagi i pozdraawiam serdecznie,
Adam
Go to the top of the page
+Quote Post
Cysiaczek
post 18.11.2007, 15:02:33
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Od tego jest specjalne subforum Ocen - przenoszę

p.s
Witaj na forum : )


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
cornholio666
post 18.11.2007, 16:43:41
Post #3





Grupa: Zarejestrowani
Postów: 472
Pomógł: 8
Dołączył: 14.03.2004
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


Jeżeli skrypt ma działać na bazie danych na wstępie bym zrobił tak:

zamieniłbym
  1. <?php
  2. $login = strip_tags($_POST['login']);
  3. $password = strip_tags($_POST['password']);
  4. ?>


na

  1. <?php
  2. $login = mysql_escape_string($_POST['login']);
  3. $password = md5($_POST['password']); // tu jeszcze można rozbudować o dodanie soli
  4. ?>


--------------------
I need TP for my bunghole!!!

Mój nowy przyjaciel - tytanowa płytka na stałe
------------------------------------------------------
AEGEE, kwiaciarnia rzeszów , notariusz rzeszów, zakład krawiecki rzeszów, paweł jakubowicz
Go to the top of the page
+Quote Post
Moli
post 18.11.2007, 21:38:16
Post #4





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Ale musisz pamiętać że mysql_escape_string działa tylko jeśli jesteś połączony z bazą smile.gif Zamiast isset, używaj empty. A i myślę ze samo logowanie poiwnno być w 1 pliku, ale sprawdzanie czy ktoś jest zalogowany powinno być możliwe w innych plikach też. Oczywiście wystarczy ze dasz session_start i if ( $_SESSION['cos'] == 1 ) smile.gif
Go to the top of the page
+Quote Post
cornholio666
post 18.11.2007, 22:52:14
Post #5





Grupa: Zarejestrowani
Postów: 472
Pomógł: 8
Dołączył: 14.03.2004
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


Cytat(Moli @ 18.11.2007, 23:38:16 ) *
Ale musisz pamiętać że mysql_escape_string działa tylko jeśli jesteś połączony z bazą smile.gif Zamiast isset, używaj empty. A i myślę ze samo logowanie poiwnno być w 1 pliku, ale sprawdzanie czy ktoś jest zalogowany powinno być możliwe w innych plikach też. Oczywiście wystarczy ze dasz session_start i if ( $_SESSION['cos'] == 1 ) smile.gif


W komentarzu jest napisane że dane będą wyciągane z bazy. Dlaczego ma używać empty zamiast isset ?


--------------------
I need TP for my bunghole!!!

Mój nowy przyjaciel - tytanowa płytka na stałe
------------------------------------------------------
AEGEE, kwiaciarnia rzeszów , notariusz rzeszów, zakład krawiecki rzeszów, paweł jakubowicz
Go to the top of the page
+Quote Post
Moli
post 19.11.2007, 08:31:15
Post #6





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


isset sprawdza czy zmienna istnieje, empty czy jest pusta. Wiec jeśli dasz
Kod
$zmienne = '';

isset przejdzie, a empty nie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 12:49