ďťż

Blog literacki, portal erotyczny - seks i humor nie z tej ziemi


Autoryzacja HTTP w PHPPodręcznik PHPPoprzedniNastępnyRozdział 17. Autoryzacja HTTP w PHP Autoryzacja HTTP jest obsługiwana przez PHP tylko wtedy, gdy PHP pracuje
jako moduł Apache'a, nie jest dostępna w trybie CGI. W skrypcie można użyć
funkcji header() by wysłać do przeglądarki komunikat
"Wymagana autoryzacja", co spowoduje wyświetlenie okienka z polami
Użytkownik i Hasło. Po wypełnieniu przez użytkownika tych pól, URL
zawierający skrypt PHP zostanie ponownie wywołany ze zmiennymi
$PHP_AUTH_USER, $PHP_AUTH_PW i $PHP_AUTH_TYPE zawierającymi odpowiednio
nazwę użytkownika, hasło i typ autoryzacji. Obecnie obsługiwany jest
jedynie typ "Basic". Więcej informacji znajdziesz w opisie funkcji
header(). Przykładowy skrypt wymuszający autoryzację klienta:
Przykład 17-1. Autoryzacja HTTP<?php
if(!isset($PHP_AUTH_USER)) {
header("WWW-Authenticate: Basic realm=\"My Realm\"");
header("HTTP/1.0 401 Unauthorized");
echo "Tekst do wysłania, jeśli użytkownik wciśnie przycisk Anuluj\n";
exit;
} else {
echo "<p>Hej $PHP_AUTH_USER.</p>";
echo "<p>Twoje hasło to $PHP_AUTH_PW.</p>";
}
?>Notatka:
Należy uważać z linijkami dodawanymi do nagłówka HTTP. W celu zachowania
maksymalnej zgodności ze wszystkimi klientami, słowo Basic powinno
zaczynać się dużą literą "B", wartość realm powinna być otoczona
cudzysłowami (nie apostrofami), i dokładnie jeden znak odstępu powinien
poprzedzać kod 401 w linii "HTTP/1.0 401".
Zamiast wyświetlać wartości $PHP_AUTH_USER i $PHP_AUTH_PW, zapewne
zechcesz sprawdzić poprawność nazwy użytkownika i hasła. Na przykład
poprzez zapytanie do bazy danych lub odnalezienie użytkownika w pliku dbm.
Należy uważać na kapryśne przeglądarki Internet Explorer. Są wrażliwe na
kolejność wysyłanych nagłówków HTTP. Wysłanie nagłowka
WWW-Authenticate przed
HTTP/1.0 401 powinno rozwiązać problem.
Aby zapobiec sytuacji w której ktoś napisze skrypt wykradający hasło
wysłane tradycyjnym zewnętrznym mechanizmem, zmienne PHP_AUTH nie będą
ustawiane, jeśli dla danej strony aktywna jest autoryzacja zewnętrzna.
W tym wypadku, aby uzyskać nazwę użytkownika zautoryzowanego zewnętrznie,
należy skorzystać ze zmiennej $REMOTE_USER.
Notatka:
Aby wykryć czy miała miejsce zewnętrzna autoryzacja, PHP sprwadza
obecność dyrektywy AuthType. Pamiętaj zatem, by
nie stosować tej dyrektywy w miejscach, gdzie będzie używana autoryzacja
PHP. Inaczej każda próba autoryzacji zakończy się niepowodzeniem.
Powyższa metoda nie zapobiega jednak wykradaniu haseł do stron wymagających
autoryzacji przez kogoś, kto na tym samym serwerze kontroluje strony nie
wymagające autoryzacji.
Zarówno Netscape Navigator jak i Internet Explorer opróżnią bufor
autoryzacji po otrzymaniu od serwera kodu 401. Można w ten sposób
wylogowanić użytkownika i zmusić go do ponownego wysłania nazwy użytkownika
i hasła. Tej metody można użyć do wylogowania użytkownika po określonym
czasie lub stworzenia przycisku "Wyloguj".
Przykład 17-2. Autoryzacja HTTP z wymuszeniem przelogowania<?php
function authenticate() {
header( "WWW-Authenticate: Basic realm=\"Testowy system autoryzacji\"");
header( "HTTP/1.0 401 Unauthorized");
echo "Musisz podać poprawny login i hasło by wejść na tę stronę\n";
exit;
}

if(!isset($PHP_AUTH_USER) || ($SeenBefore == 1 && !strcmp($OldAuth, $PHP_AUTH_USER)) ) {
authenticate();
}
else {
echo "</p>Witaj: $PHP_AUTH_USER<br>";
echo "Poprzenio: $OldAuth";
echo "<form action=\"$PHP_SELF\" METHOD=POST>\n";
echo "<input type=\"hidden\" name=\"SeenBefore\" value=\"1\">\n";
echo "<input type=\"hidden\" name=\"OldAuth\" value=\"$PHP_AUTH_USER\">\n";
echo "<input type=\"submit\" value=\"Re Authenticate\">\n";
echo "</form></p>\n";
}
?> Powyższa metoda nie jest wymagana przez autoryzację HTTP typu "Basic",
więc nie można na niej polegać. Testy z przeglądarką Lynx pokazały, że
Lynx nie usuwa danych o autoryzacji po odebraniu od serwera kodu 401,
zatem przejście wstecz a następnie do przodu otworzy stronę, chyba, że
wymagania co do danych autoryzacji zmieniły się. Użytkownik może jednak
użyć klawisza '_' by usunąc dane o autoryzacji.
Autoryzacja HTTP nie działa jeśli używasz serwera Microsoft IIS i
PHP w wersji CGI. Powodem są pewne ograniczenia IIS.
PoprzedniSpis treściNastępnyTworzenie i manipulacja obrazkamiPoczątek rozdziałuCiasteczka (cookies)
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • qualintaka.pev.pl
  •