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-- 6,240 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-1"?>
  <chapter id="features.http-auth">
  <title>HTTP-Authentifizierung mit PHP</title>

  <simpara>
   Die HTTP-Authentifizierung durch PHP ist nur verfgbar, wenn PHP als
   Apache-Modul luft und funktioniert daher nicht mit der CGI-Version.
   In einem PHP-Skript fr ein Apache-Modul kann man die Funktion
   <function>header</function> benutzen, um die Nachricht "Authentifizierung 
   notwendig" an den Client-Browser zu senden, damit dieser
   ein Fenster zur Eingabe von Benutzername/Passwort ffnet.
   Hat der Benutzer diese eingegeben, wird die URL des PHP-Scripts
   mit den Variablen $PHP_AUTH_USER, $PHP_AUTH_PW 
   und $PHP_AUTH_TYPE, die den jeweiligen Benutzernamen, das 
   Passwort und den Typ der Identifizierung enthalten, erneut aufgerufen.
   Momentan wird nur das Authentifizierungsmodell "basic" untersttzt. 
   Nheres hierzu bei der <function>header</function> Funktion.</simpara>
   
  <para>
   Ein Auszug aus einem Skript, das die Clientauthentifizierung
   auf einer Seite erzwingt, wrde so aussehen:
 
   <example>
    <title>HTTP-Authentifizierung</title>
    <programlisting role="php">
&lt;?php
  if(!isset($PHP_AUTH_USER)) {
    Header(&quot;WWW-Authenticate: Basic realm=\&quot;My Realm\&quot;&quot;);
    Header(&quot;HTTP/1.0 401 Unauthorized&quot;);
    echo &quot;Text to send if user hits Cancel button\n&quot;;
    exit;
  } else {
    echo &quot;Hello $PHP_AUTH_USER.&lt;P&gt;&quot;;
    echo &quot;You entered $PHP_AUTH_PW as your password.&lt;P&gt;&quot;;
  }
?&gt;
    </programlisting>
   </example></para>

  <note>
   <title>Hinweis</title>
   <para>
    Achten Sie bei den Header-Zeilen fr maximale Kompatibilitt auf die
    richtige Schreibweise! Das Schlsselwort "Basic" sollte genau so geschrieben
    werden, der Realm-String muss in doppelte (nicht einfache) Anfhrungszeichen
    eingeschlossen sein, und in der "HTTP/1.0 401"-Zeile
    darf nur genau ein Leerzeichen vor dem 401-Code stehen.
   </para>
  </note>

  <para>
   Anstatt $PHP_AUTH_USER und $PHP_AUTH_PW einfach nur 
   auszugeben, werden Sie den Benutzernamen und das Passwort 
   auf Gltigkeit berprfen wollen. Dies kann durch die Abfrage 
   einer Datenbank oder das Einlesen einer Textdatei geschehen.</para>

  <para>
   Vorsicht bei einigen Internet Explorer-Versionen - sie scheinen
   sehr whlerisch zu sein, was die Reihenfolge der Header angeht.
   Abhilfe schafft hier das Senden des <emphasis>WWW-Authenticate</emphasis>
   Headers vor dem <errorcode>HTTP/1.0 401</errorcode>.</para>

  <simpara>
   Um zu unterbinden, dass ein Skript das Passwort einer durch 
   einen traditionellen externen Mechanismus geschtzten Seite
   ausliest, werden die PHP_AUTH Variablen nicht gesetzt, wenn 
   eine externe Authentifizierung fr diese bestimmte Seite aktiviert
   ist. In diesem Fall kann die $REMOTE_USER Variable benutzt
   werden, um den Benutzer durch die externe Zugriffskontrolle
   zu identifizieren.</simpara>

  <note>
   <title>Konfigurationshinweis</title>
   <para>
    PHP prft das Vorhandensein einer <literal>AuthType</literal>
    Apache-Direktive, um zu entscheiden, ob eine externe
    Authentifizierung aktiv ist. Vermeiden Sie deshalb diese
    Konfigurationsdirektive im Kontext der PHP-Authentifizierung
    (anderenfalls wird jeder Authentifizierungsversuch misslingen).
   </para>
  </note>

  <simpara>
   Zu beachten ist, dass obenstehendes keinesfalls jemanden,
   der die Kontrolle ber eine nichtgeschtzte URL hat, davon
   abhalten kann, Passwrter von geschtzten URLs auf dem
   gleichen Rechner auszulesen.</simpara>
  <simpara>
   Sowohl Netscape als auch der Internet Explorer lschen den
   lokalen Authentifizierungscache des Browserfensters, wenn der
   Server eine 401-Meldung zurckgibt. Dies kann benutzt werden, um
   einen Benutzer "auszuloggen" und eine erneute Eingabe des
   Benutzernamens/Passworts zu erzwingen. Manchmal wird dieses Verhalten
   fr das automatische Ausloggen nach Ablauf einer bestimmten Zeitspanne
   oder fr einen Logout-Button genutzt.</simpara>
  <simpara></simpara>
   <example>
     <title>HTTP-Authentifizierung, mit erneuter Anforderung von Name/Passwort</title>
     <programlisting role="php">
&lt;?php
  function authenticate() {
   Header( &quot;WWW-Authenticate: Basic realm=\&quot;Test Authentication System\&quot;&quot;);
   Header( &quot;HTTP/1.0 401 Unauthorized&quot;);
   echo &quot;You must enter a valid login ID and password to access this resource\n&quot;;
   exit;
  }

  if(!isset($PHP_AUTH_USER) || ($SeenBefore == 1 &amp;&amp; !strcmp($OldAuth, $PHP_AUTH_USER)) ) {
   authenticate();
  } 
  else {
   echo &quot;Welcome: $PHP_AUTH_USER&lt;BR&gt;&quot;;
   echo &quot;Old: $OldAuth&quot;;
   echo &quot;&lt;FORM ACTION=\&quot;$PHP_SELF\&quot; METHOD=POST&gt;\n&quot;;
   echo &quot;&lt;INPUT TYPE=HIDDEN NAME=\&quot;SeenBefore\&quot; VALUE=\&quot;1\&quot;&gt;\n&quot;;
   echo &quot;&lt;INPUT TYPE=HIDDEN NAME=\&quot;OldAuth\&quot; VALUE=\&quot;$PHP_AUTH_USER\&quot;&gt;\n&quot;;
   echo &quot;&lt;INPUT TYPE=Submit VALUE=\&quot;Re Authenticate\&quot;&gt;\n&quot;;
   echo &quot;&lt;/FORM&gt;\n&quot;;
  }
?&gt;
   </programlisting>
  </example>
  <simpara>
   Dieses Verhalten wird vom Authentifizierungsstandard HTTP Basic 
   nicht gefordert, daher sollte man sich nie darauf verlassen. Tests
   mit Lynx haben gezeigt, dass Lynx die Authentifizierungsinformationen
   bei Erhalt einer 401-Meldung nicht lscht. Ein Klick auf den Zurck-
   Button und danach auf Vorwrts wird die angeforderte Adresse
   ffnen (und zwar so lange, bis die Identifizierung der Benutzer
   gendert wird).</simpara>
  <simpara>
   Weiterhin muss beachtet werden, dass dies unter dem Microsoft
   IIS mit der CGI-Version von PHP aufgrund einer
   Einschrnkung des IIS nicht funktioniert.</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:
-->