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 (130 lines) | stat: -rw-r--r-- 5,259 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
<?xml version="1.0" encoding="iso-8859-1"?>
 <chapter id="features.http-auth">
  <title>HTTP authenticatie met PHP</title>

  <simpara>
   De HTTP Authenticatie functies in PHP zijn alleen te gebruiken als
   PHP gebruikt wordt als Apache module en is zijn NIET te gebruiken in
   de CGI versie. In een PHP script is het dan mogelijk, met de 
   <function>header</function> functie, een
   &quot;Authentication Required&quot; bericht naar de browser te sturen.
   Dit veroorzaakt dat de browser een "Login/Password" invul window aan
   de gebruiker laat zien. Zo gauw de gebruiker een login naam en een
   password heeft ingevuld wordt de URL met het PHP script dat de
   header stuurde opnieuw aangeroepen. Nu zijn de variablen
   $PHP_AUTH_USER, $PHP_AUTH_PW en $PHP_AUTH_TYPE gevuld met de 
   waarden die de gebruiker heeft ingevuld. Op dit moment word alleen de
   &quot;Basic&quot; authenticatie ondersteund. Zie de
   <function>header</function> functie voor meer informatie.</simpara>
  <para>
   Dit voorbeeld script dwingt gebruikers authenticatie af:
   <example>
    <title>HTTP Authentication voorbeeld</title>
    <programlisting role="php">
&lt;?php
  if(!isset($PHP_AUTH_USER)) {
    Header(&quot;WWW-Authenticate: Basic realm=\&quot;Mijn Realm\&quot;&quot;);
    Header(&quot;HTTP/1.0 401 Unauthorized&quot;);
    echo &quot;Tekst om te sturen als de gebruiker op Annuleren klikt.\n&quot;;
    exit;
  } else {
    echo &quot;Hallo $PHP_AUTH_USER.&lt;P&gt;&quot;;
    echo &quot;Je gebruikte $PHP_AUTH_PW als je password.&lt;P&gt;&quot;;
  }
?>
    </programlisting>
   </example></para>

  <para>
   In plaats van slechts de ingevoerde waarden aan de gebruiker te 
   laten zien, wil je waarschijnlijk $PHP_AUTH_USER en $PHP_AUTH_PW
   gebruiken om de gebruiker te valideren tegen bijvoorbeeld een database.
   </para>
  <para>
   Kijk uit voor buggy Internet Explorer browsers. Sommige zijn
   erg nauwkeurig over de volgorde dat de headers gestuurd worden.
   Door eerst de <emphasis>WWW-Authenticate</emphasis> header te sturen
   en dan de <errorcode>HTTP/1.0 401</errorcode> header lijkt het probleem
   opgelost te zijn.</para>

  <simpara>
   Om te voorkomen dat iemand een script schrijft die de wachtworden 
   achterhaald van iemand die al eerder geauthenticeerd was door middel
   van het externe authenticatie systeem worden de PHP_AUTH_* variablen
   niet gevuld als er gebruik word gemaakt van het externe authenticatie
   systeem voor die bepaalde pagina. In dit geval kan de variable
   $REMOTE_USER gebruikt worden om de extern geauthenticeerde gebruiker
   te identificeren.
  </simpara>

  <simpara>
   Dit weerhoud iemand er echter niet van om wachtwoorden te stelen
   via een niet-geauthenticeerde URL op dezelfde server.
  </simpara>

  <simpara>
   Zowel Netscape als Internet Explorer zullen hun huidige cache in het
   huidige Window legen zogauw ze een 401 header van de server krijgen.
   Op deze manier kan je op een efficiente manier een gebruiker
   &quot;uit loggen&quot;.
   Sommige mensen gebruiken dit om een login te laten verlopen of
   gebruiken dit met een &quot;log-out&quot; knop.</simpara>
  <simpara></simpara>
   <example>
     <title>HTTP Authentication voorbeeld welke een nieuwe loginnaam
      en password vereist.</title>
     <programlisting role="php">
&lt;?php
  function authenticate() {
    Header( &quot;WWW-Authenticate: Basic realm=\&quot;Test Authentication Systeem\&quot;&quot;);
    Header( &quot;HTTP/1.0 401 Unauthorized&quot;);
    echo &quot;Je moet een geldige login en wachtwoord opgeven om bij &quot;.
    &quot;deze pagina te komen\n&quot;;
    exit;
  }
 
  if(!isset($PHP_AUTH_USER) || ($EerderGezien == 1 &amp;&amp; !strcmp($VorigeNaam, $PHP_AUTH_USER)) ) {
   authenticate();
  } 
  else {
   echo &quot;Welcome: $PHP_AUTH_USER&lt;BR&gt;&quot;;
   echo &quot;Old: $VorigeNaam&quot;;
   echo &quot;&lt;FORM ACTION=\&quot;$PHP_SELF\&quot; METHOD=POST&gt;\n&quot;;
   echo &quot;&lt;INPUT TYPE=HIDDEN NAME=\&quot;EerderGezien\&quot; VALUE=\&quot;1\&quot;&gt;\n&quot;;
   echo &quot;&lt;INPUT TYPE=HIDDEN NAME=\&quot;VorigeNaam\&quot; VALUE=\&quot;$PHP_AUTH_USER\&quot;&gt;\n&quot;;
   echo &quot;&lt;INPUT TYPE=Submit VALUE=\&quot;Opnieuw inloggen\&quot;&gt;\n&quot;;
   echo &quot;&lt;/FORM&gt;\n&quot;;
  }
?>
   </programlisting>
  </example>
  <simpara>
   Dit gedrag is niet vereist voor de HTTP Basic authenticatie standaard,
   dus je moet hier nooit op vertrouwen. Tests met de Lynx browser wijzen
   uit dat Lynx zijn cache NIET leegt als hij een 401 header van de server
   krijgt. Dus als je 'back' en 'forward' gaat krijg je gewoon de pagina 
   te zien met de eerder ingevoerde waarden (Tenzij de login voorwaarden
   zijn gewijzigd).
  </simpara>
  <simpara>
   Let op: Dit werkt niet met Microsoft's IIS server en de CGI versie
   van PHP vanwege een gebrek in 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:
-->