File: http-auth.xml

package info (click to toggle)
phpdoc 20020310-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 35,272 kB
  • ctags: 354
  • sloc: xml: 799,767; php: 1,395; cpp: 500; makefile: 200; sh: 140; awk: 51
file content (154 lines) | stat: -rw-r--r-- 5,550 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
<?xml version="1.0" encoding="iso-8859-2"?>
<!-- EN-Revision: 1.21 Maintainer: slawek Status: ready -->
<!-- $Revision: 1.10 $ -->
 <chapter id="features.http-auth">
  <title>Autoryzacja HTTP w PHP</title>

  <simpara>
   Autoryzacja HTTP jest obsugiwana przez PHP tylko wtedy, gdy PHP pracuje
   jako modu Apache'a, nie jest dostpna w trybie CGI. W skrypcie mona uy
   funkcji <function>header</function> by wysa do przegldarki komunikat
   "Wymagana autoryzacja", co spowoduje wywietlenie okienka z polami
   Uytkownik i Haso. Po wypenieniu przez uytkownika tych pl, URL
   zawierajcy skrypt PHP zostanie ponownie wywoany ze zmiennymi
   $PHP_AUTH_USER, $PHP_AUTH_PW i $PHP_AUTH_TYPE zawierajcymi odpowiednio
   nazw uytkownika, haso i typ autoryzacji. Obecnie obsugiwany jest
   jedynie typ "Basic". Wicej informacji znajdziesz w opisie funkcji
   <function>header</function>.</simpara>
  <para>
   Przykadowy skrypt wymuszajcy autoryzacj klienta:
   <example>
    <title>Autoryzacja HTTP</title>
    <programlisting role="php">
<![CDATA[
<?php
  if (!isset($PHP_AUTH_USER)) {
    header("WWW-Authenticate: Basic realm=\"My Realm\"");
    header("HTTP/1.0 401 Unauthorized");
    echo "Tekst do wysania, jeli uytkownik wcinie przycisk Anuluj\n";
    exit;
  } else {
    echo "<p>Hej $PHP_AUTH_USER.</p>";
    echo "<p>Twoje haso to $PHP_AUTH_PW.</p>";
  }
?>
]]>
    </programlisting>
   </example></para>

  <note>
   <para>
    Naley uwaa z linijkami dodawanymi do nagwka HTTP. W celu zachowania
    maksymalnej zgodnoci ze wszystkimi klientami, sowo Basic powinno
    zaczyna si du liter "B", warto realm powinna by otoczona
    cudzysowami (nie apostrofami), i dokadnie jeden znak odstpu powinien
    poprzedza kod 401 w linii "HTTP/1.0 401".
   </para>
  </note>

  <para>
   Zamiast wywietla wartoci $PHP_AUTH_USER i $PHP_AUTH_PW, zapewne
   zechcesz sprawdzi poprawno nazwy uytkownika i hasa. Na przykad
   poprzez zapytanie do bazy danych lub odnalezienie uytkownika w pliku dbm.
  </para>

  <para>
   Naley uwaa na kapryne przegldarki Internet Explorer. S wraliwe na
   kolejno wysyanych nagwkw HTTP. Wysanie nagowka
   <emphasis>WWW-Authenticate</emphasis> przed
   <literal>HTTP/1.0 401</literal> powinno rozwiza problem.
  </para>

  <simpara>
   Aby zapobiec sytuacji w ktrej kto napisze skrypt wykradajcy haso
   wysane tradycyjnym zewntrznym mechanizmem, zmienne PHP_AUTH nie bd
   ustawiane, jeli dla danej strony aktywna jest autoryzacja zewntrzna.
   W tym wypadku, aby uzyska nazw uytkownika zautoryzowanego zewntrznie,
   naley skorzysta ze zmiennej $REMOTE_USER.
  </simpara>

  <note>
   <para>
    Aby wykry czy miaa miejsce zewntrzna autoryzacja, PHP sprwadza
    obecno dyrektywy <literal>AuthType</literal>. Pamitaj zatem, by
    nie stosowa tej dyrektywy w miejscach, gdzie bdzie uywana autoryzacja
    PHP. Inaczej kada prba autoryzacji zakoczy si niepowodzeniem.
   </para>
  </note>

  <simpara>
   Powysza metoda nie zapobiega jednak wykradaniu hase do stron wymagajcych
   autoryzacji przez kogo, kto na tym samym serwerze kontroluje strony nie
   wymagajce autoryzacji.
  </simpara>
  <simpara>
   Zarwno Netscape Navigator jak i Internet Explorer oprni bufor
   autoryzacji po otrzymaniu od serwera kodu 401. Mona w ten sposb
   wylogowani uytkownika i zmusi go do ponownego wysania nazwy uytkownika
   i hasa. Tej metody mona uy do wylogowania uytkownika po okrelonym
   czasie lub stworzenia przycisku "Wyloguj".
  </simpara>
  <simpara></simpara>
   <example>
     <title>Autoryzacja HTTP z wymuszeniem przelogowania</title>
     <programlisting role="php">
<![CDATA[
<?php
  function authenticate() {
    header( "WWW-Authenticate: Basic realm=\"Testowy system autoryzacji\"");
    header( "HTTP/1.0 401 Unauthorized");
    echo "Musisz poda poprawny login i haso 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>
   Powysza metoda nie jest wymagana przez autoryzacj HTTP typu "Basic",
   wic nie mona na niej polega. Testy z przegldark Lynx pokazay, e
   Lynx nie usuwa danych o autoryzacji po odebraniu od serwera kodu 401,
   zatem przejcie wstecz a nastpnie do przodu otworzy stron, chyba, e
   wymagania co do danych autoryzacji zmieniy si. Uytkownik moe jednak
   uy klawisza '_' by usunc dane o autoryzacji.
  </simpara>
  <simpara>
   Autoryzacja HTTP nie dziaa jeli uywasz 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
indent-tabs-mode:nil
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
-->