Webcity.pl


  Piszemy Engine cz. 2

  Proste forum dyskusy...

  Optymalizacja skrypt...

  Sterownik MySQL

  Piszemy Engine cz. 1

 

 02.02.06 - [new] E-video - artykuł

 30.01.06 - [update] Artykuł o sesjach

 18.12.05 - [update] PDO - artykuł

 19.08.05 - [new+upd] Aktualizacja materia...

 26.04.05 - [update] Nowy artykuł



  Pomocy WML
[php]Sesje nie działają, ...
[actionscript 2.0] [flash...
Problem z talicami w php
[ocena] llll.pl darmowe a...
Kamera na stronie interne...
Kamera na stronie interne...
[xml] Jak wyciągnąć dane
Wizualizacja w JS - POMOC
Web Developer - stała / f...

... i wiele innych wątków na forum ›

Partnerzy
› allRSS.info - katalog zasobów RSS
› iloveflyer.org - webdesign
› webserv.pl - serverpack
› skryptoteka.pl - mnóstwo skryptów
› vel.pl - hosting
› TelePraca.net - pracuj swobodnie
› PHP Solutions - magazyn PHP
› HELION - wydawnictwo informatyczne

Ksišżka dnia

CityMag
Wpisz swój e-mail, aby zaprenumerować nasz Magazyn, który zawiera najnowsze informacje ze świata i najciekawsze teksty.
 

Szukasz czegoś?
Nasza wyszukiwarka znajdzie wszystko, czego szukasz.
 

Szukanie zawansowane


  Reklama
  Redakcja
  Hosting
  Kanał

© WebCity.pl Team
 
 
  Forum Forum
Kursy Kursy
Porady Porady
Recenzje Recenzje
Newsy Newsy
Katalog stron WWW Katalog
Skrypty PHP Skrypty
Download Oferty i praca
Artykuły:
 Teoria
 Praktyka
 Promocja
 Inne
 

 Webcity.pl |

Autoryzacja w PHP

Autor: Zbiju
   Podczas tworzenia różnego rodzaju skryptów, każdy programista w pewnym momencie dochodzi do miejsca, w którym pewne dane powinny być w jakiś sposób zabezpieczone przed nieodpowiednimi osobami. Doskonałym przykładem są panele administracyjne najrozmaitszych skryptów. Jedna z metod to stworzenie prostego formularza, którego zawartość analizuje nasz programik.

   Informacje o użytkownikach można przechowywać na kilka sposobów. Gdy ich liczba jest duża najlepszym wyjściem wydaje się baza danych. Nie każdy ma taką bazę i nie każdy chce skorzystać z takiego rozwiązania. W takim wypadku alternatywnym rozwiązaniem są pliki, których format sami sobie możemy wymyślić. Inna sytuacja ma miejsce, gdy tylko niewielka liczba ludzi, w skrajnym przypadku jedna osoba, ma dostęp do haseł. Ich dane można, choć nie jest to najlepsze rozwiązanie, wpisać bezpośrednio do kodu. Bardziej efektymnym rozwiązaniem jest stworzenie okienka, w które wpisujemy login i hasło. Cała sprawa opiera się na wysłaniu odpowiedniego nagłówka do przeglądarki i sprawdzaniu odpowiednich zmiennych globalnych.

<?php
   if (!isset($PHP_AUTH_USER)) {
      header('WWW-Authenticate: Basic realm="Tajne miejsce"');
      header('HTTP/1.0 401 Unauthorized');
      echo 'Brak dostępu.';
      exit;
   } else if (isset($PHP_AUTH_USER)) {
      if (($PHP_AUTH_USER != "admin") || ($PHP_AUTH_PW != "abc123")) {
         header('WWW-Authenticate: Basic realm="Tajne miejsce"');
         header('HTTP/1.0 401 Unauthorized');
         echo 'Brak dostępu.';
         exit;
      } else {
         echo "<P>Zalogowałeś się!</p>";
      }
   }
?>

   Ten skrypcik wyświetla okienko, w które należy wpisać login i hasło, ale tylko w przypadku gdy zmienna $PHP_AUTH_USER jest pusta. Jeśli login i hasło są dobre pojawia się komunikat, stwierdzający fakt zalogowania. Jest to najprostszy przykład, gdy istnieje tylko jeden użytkownik. Wartości zmiennych są porównywane z tymi wpisanymi na stałe do skryptu. Zmiana hasła wymaga zmiany kodu. Co jednak zrobić, gdy dane są przechowywane w pliku? Załóżmy, że nasz pliczek z hasłami ma naztępujący format login:hasło. W każdej linijce znajdują się informacje o innym użytkowniku, np.

jan:ai890d
adam:29hj0jk
ania:fsSS92
kasia:2NNg8ed
rysiu:a76zFs

Kod PHP, wykonujący cały proces:

<?php
   if (!isset($PHP_AUTH_USER)) {
      header('WWW-Authenticate: Basic realm="Tajne miejsce"');
      header('HTTP/1.0 401 Unauthorized');
      exit;
   } else if (isset($PHP_AUTH_USER)) {
      $plik = "/sciezka/do/hasla.txt";
      $fp = fopen($plik, "r");
      $zawartosc = fread($fp, filesize($plik));
      fclose($fp);

      $linia = explode("\n", $zawartosc);

      $i = 0;

      while($i <= sizeof($linia)) {
         $dane = explode(":", $linia[$i]);
         if (($dane[0] == "$PHP_AUTH_USER") && ($dane[1] == "$PHP_AUTH_PW")) {
            $auth = 1;
            break;
         } else {
            $auth = 0;
         }
         $i++;
      }

      if ($auth == "1") {
         echo "<p>Zalogowałeś się!</p>";
         exit;
      } else {

         header('WWW-Authenticate: Basic realm="Tajne miejsce"');
         header('HTTP/1.0 401 Unauthorized');
         echo 'Brak dostępu';
         exit;
      }
   }
?>

   Jak zwykle kilka słów wyjeśniania. Funkcja fopen() otwiera plik, ścieżkę do niego podawana jest jako pierwszy parametr to tryb w jakim plik jest otwierany. W naszym przypadku tylko do odczytu, bo przecież nie będziemy do niego nic zapisywać. Sprawdzamy tylko czy podany użytkowik istnieje. Nie wystarczy otworzyć plik, należy go jeszcze później odczytać, służy do tego funkcja fread(). Pierwszym parametrem jest link do pliku zwrócony przez poprzednią funkcję, drugim parametrem jest ilość odczytywanych bajtów. W naszym przypadku wszystkie, filesize() zwraca wielkość podanego pliku. W ten sposób cała treść pliku znajduje się w zmiennej $zawartosc. Explode() dzieli podany string, kolejne jego części są zapisywane do tablicy. Znak (znaki) według, którego dokonywany jest podział zostaje wyrzucony. Ponieważ dzielimy wg znaku końca linii, każdy element tablicy to osobna linia. Kolejne wywołanie explode() dzieli już linię na login i hasło użytkownika. Dane te są porównywane z wprowadzonymi i jeśli któraś para pasuje, pętla jest przerywana i ustawiana odpiednia zmienna ($auth). Jeśli jednak żadna para login, hasło nie pasuje zmienna ta ma wartość 0, co jest traktowane jako fałsz. Ot cała filozofia. Działania na bazie danych są jeszcze prostsze, bo nie trzeba sprawdzać wszystkich rekordów, tylko wybrać ten odpowieni. Jeśli ilość zwróconych rekordów (rzędów) jest równa 0, użytkownik nie istnieje.

---
   Od redakcji: Artykuł ten już swoje lata ma i jeżeli będziesz miał problemy z autoryzacją, pamiętaj o innym tekście: "System wejścia w PHP", który również można znaleźć na Webcity.pl.

Powrót