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 (135 lines) | stat: -rw-r--r-- 6,145 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
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.11 $ -->
 <chapter id="features.http-auth">
  <title>Authentification HTTP avec PHP</title>
  <simpara>
     Les fonctions d'authentification <acronym>HTTP</acronym> de PHP ne sont disponibles
     que si PHP est ex&eacute;cut&eacute; comme module Apache, et non
     pas sous la forme d'un CGI. Sous cette forme, il est possible
     d'utiliser la fonction <function>header</function> pour demander
     une authentification ("Authentication Required" ) au client,
     g&eacute;n&eacute;rant ainsi l'apparition d'une fen&ecirc;tre
     de demande d'utilisateur et de mot de passe. Une fois que les
     champs ont &eacute;t&eacute; remplis, l'URL sera de nouveau
     appel&eacute;e, avec les variables <varname>$PHP_AUTH_USER</varname>,
     <varname>$PHP_AUTH_PW</varname> et  <varname>$PHP_AUTH_TYPE</varname>
     contenant respectivement le nom d'utilisateur, le mot de passe et
     le type d'authentification. Actuellement, seule l'authentification
     simple ("Basic") est support&eacute;e. Reportez-vous &agrave; la fonction
     <function>header</function> pour plus d'informations.
   </simpara>
  <para>
   Voici un exemple de script qui force l'authentification du client
   pour acc&eacute;der &agrave; une page :
   <example>
    <title>Exemple d'authentification HTTP</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;Texte &agrave; envoyer si le client appuie sur le bouton d'annulation\n&quot;;
    exit;
  } else {
    echo &quot;Bonjour $PHP_AUTH_USER.&lt;P&gt;&quot;
    echo &quot;Vous avez entr&eacute; le mot de passe $PHP_AUTH_PW.&lt;P&gt;&quot;
  }
?&gt;
    </programlisting>
   </example>
   </para>
  <para>
     Au lieu d'afficher simplement les variables globales <varname>$PHP_AUTH_USER</varname>
     et <varname>$PHP_AUTH_PW</varname>, vous pr&eacute;f&eacute;rerez s&ucirc;rement
     v&eacute;rifier la validit&eacute; du nom d'utilisateur et du mot de passe.
     Par exemple, en envoyant ces informations &agrave; une base de donn&eacute;es,
     ou en recherchant dans un fichier dbm.
  </para>
  <para>
    M&eacute;fiez-vous des navigateurs bugg&eacute;s, tels que Internet Explorer.
    Ils semblent tr&egrave;s susceptibles concernant l'ordre des en-t&ecirc;tes.
    Envoyer l'en-t&ecirc;te d'authentification (<emphasis>WWW-Authenticate</emphasis>)
    avant le code de <errorcode>HTTP/1.0 401</errorcode> semble lui convenir
    jusqu'&agrave; pr&eacute;sent.
  </para>
  <simpara>
    Pour &eacute;viter que quelqu'un &eacute;crive un script qui
    r&eacute;v&egrave;le les mots de passe d'une page, &agrave; la
    quelle on a acc&eacute;d&eacute; par une authentification traditionnelle,
    les variables globales PHP_AUTH ne seront pas assign&eacute;es si
    l'authentification externe a &eacute;t&eacute; activ&eacute;e pour
    cette page. Dans ce cas, la variable <varname>$REMOTE_USER</varname> peut &ecirc;tre
    utilis&eacute;e pour identifier l'utilisateur &agrave; l'ext&eacute;rieur.
  </simpara>
  <simpara>
    Notez cependant que les manipulations ci-dessus n'emp&ecirc;chent
    pas quiconque poss&egrave;de une page non authentifi&eacute;e
    de voler les mots de passe des pages prot&eacute;g&eacute;es,
    sur le m&ecirc;me serveur.
  </simpara>
  <simpara>
   Netscape et Internet Explorer effaceront le cache d'authentification client
   s'ils recoivent une r&eacute;ponse 401. Cela permet de d&eacute;connecter
   un utilisateur, pour le forcer &agrave; r&eacute;-entrer son nom de compte
   et son mot de passe. Certains programmeurs l'utilisent pour donner un
   d&eacute;lai d'expiration, ou alors, fournissent un bouton de d&eacute;connexion.
  </simpara>
  <example>
   <title>
    Authentification HTTP avec nom d'utilisateur/mot de passe forc&eacute;
   </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;Vous devez entrer un nom d'utilisateur valide et un mot de passe correct pour acc&eacute;der &agrave; cette ressource\n&quot;;
   exit;
  }
  if(!isset($PHP_AUTH_USER) || ($SeenBefore == 1 &amp;&amp; !strcmp($OldAuth, $PHP_AUTH_USER)) ) {
   authenticate();
  }
  else {
   echo &quot;Bienvenue $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>
   Ce comportement n'est pas n&eacute;cessaire par le standard
   d'authentification HTTP Basic. Les tests avec Lynx ont montr&eacute;
   qu'il n'affectait pas les informations de session lors de la
   r&eacute;ception d'un message de type 401. Ce qui fait que presser la
   touche "retour" (back) &agrave; un client lynx pr&eacute;c&eacute;demment authentifi&eacute;
   donnera l'acc&egrave;s direct &agrave; la ressource. Cependant,
   l'utilisateur peut utiliser la touche '_' pour d&eacute;truire
   les anciennes authentifications.
  </simpara>
  <simpara>
   Notez aussi que tout ceci ne fonctionne pas sous Microsoft IIS et que les
   limitations de PHP en version CGI sont dues aux limitations de 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:
-->