cvs: phpdoc /pl/features http-auth.xml
| From: | Slawomir Pucia | Date: | Fri, 02 Nov 2001 23:29:50 +0000 |
| Subject: | cvs: phpdoc /pl/features http-auth.xml | ||
| Groups: | php.doc | ||
| Request: | Send a blank email to phpdoc+get-969338466@lists.php.net to get a copy of this message | ||
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
-->