slawek Fri Nov 2 18:29:50 2001 EDT Added files: /phpdoc/pl/features http-auth.xml Log: Finished translation
Index: phpdoc/pl/features/http-auth.xml +++ phpdoc/pl/features/http-auth.xml <?xml encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <chapter id="features.http-auth"> <title>Autoryzacja HTTP w PHP</title> <simpara> 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 <function>header</function> 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 <function>header</function>. <para> Przykładowy skrypt wymuszający autoryzację klienta: <example> <title>Autoryzacja HTTP</title> <programlisting role="php"> <?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>"; } ?> </programlisting> </example></para> <note> <para> 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". </para> </note> <para> 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. </para> <para> 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 <emphasis>WWW-Authenticate</emphasis> przed <errorcode>HTTP/1.0 401</errorcode> powinno rozwiązać problem. </para> <simpara> 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. </simpara> <note> <para> Aby wykryć czy miała miejsce zewnętrzna autoryzacja, PHP sprwadza obecność dyrektywy <literal>AuthType</literal>. 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. </para> </note> <simpara> 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. </simpara> <simpara> 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". </simpara> <simpara></simpara> <example> <title>Autoryzacja HTTP z wymuszeniem przelogowania</title> <programlisting role="php"> <?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"; } ?> </programlisting> </example> <simpara> 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. </simpara> <simpara> Autoryzacja HTTP nie działa jeśli używasz serwera Microsoft IIS i PHP w wersji CGI. Powodem są pewne ograniczenia IIS. </simpara> </chapter> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t sgml-parent-document:nil sgml-default-dtd-file:"../../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 -->