mirror of
https://github.com/php/doc-de.git
synced 2026-03-24 07:12:15 +01:00
181 lines
6.8 KiB
XML
181 lines
6.8 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: bdf9a4e40204c805f2c2a5c94c2f2f8f5556195a Maintainer: samesch Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
<chapter xml:id="features.http-auth" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>HTTP-Authentifizierung mit PHP</title>
|
|
|
|
<simpara>
|
|
Man kann die Funktion <function>header</function> verwenden, um die
|
|
Nachricht <literal>"Authentifizierung erforderlich"</literal> 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-Skripts mit den
|
|
<link linkend="reserved.variables">vordefinierten Variablen</link>
|
|
<varname>PHP_AUTH_USER</varname>, <varname>PHP_AUTH_PW</varname> und
|
|
<varname>AUTH_TYPE</varname>, die den Benutzernamen, das Passwort und den
|
|
Typ der Authentifizierung enthalten, erneut aufgerufen. Diese
|
|
vordefinierten Variablen befinden sich im Array
|
|
<varname>$_SERVER</varname>. Es wird <emphasis>nur</emphasis> die
|
|
Authentifizierungsmethode "Basic" unterstützt. Näheres hierzu bei der
|
|
Funktion <function>header</function>.
|
|
</simpara>
|
|
|
|
<para>
|
|
Ein Auszug aus einem Skript, das die Clientauthentifizierung auf einer
|
|
Seite erzwingt, würde so aussehen:
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Beispiel: Basic-HTTP-Authentifizierung</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
if (!isset($_SERVER['PHP_AUTH_USER'])) {
|
|
header('WWW-Authenticate: Basic realm="My Realm"');
|
|
header('HTTP/1.0 401 Unauthorized');
|
|
echo 'Text, der gesendet wird, falls der Benutzer auf Abbrechen drückt';
|
|
exit;
|
|
} else {
|
|
echo "<p>Hallo {$_SERVER['PHP_AUTH_USER']}.</p>";
|
|
echo "<p>Sie gaben {$_SERVER['PHP_AUTH_PW']} als Passwort ein.</p>";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
|
|
<note>
|
|
<title>Hinweis zur Kompatibilität</title>
|
|
<para>
|
|
Achten Sie für die maximale Kompatibilität mit allen Clients bei den
|
|
Header-Zeilen auf die richtige Schreibweise! Das Schlüsselwort "Basic"
|
|
sollte genau so geschrieben werden, der Realm-String muss in doppelte
|
|
(nicht einfache) Anführungszeichen gesetzt werden und in der
|
|
<emphasis>HTTP/1.0 401</emphasis>-Zeile darf nur genau ein Leerzeichen vor
|
|
dem <emphasis>401</emphasis>-Code stehen. Die Authentifizierungsparameter
|
|
müssen durch Kommata getrennt werden.
|
|
</para>
|
|
</note>
|
|
|
|
<para>
|
|
Anstatt <varname>PHP_AUTH_USER</varname> und <varname>PHP_AUTH_PW</varname>
|
|
wie im Beispiel oben einfach nur auszugeben, werden Sie den Benutzernamen
|
|
und das Passwort auf Gültigkeit überprüfen wollen. Dies kann durch das
|
|
Abfragen einer Datenbank oder die Suche des Benutzers in einer Textdatei
|
|
geschehen.
|
|
</para>
|
|
|
|
<para>
|
|
Vorsicht bei einigen Internet Explorer-Versionen - sie scheinen sehr
|
|
wählerisch zu sein, was die Reihenfolge der Header angeht. Abhilfe schafft
|
|
hier das Senden des <emphasis>WWW-Authenticate</emphasis>-Headers vor dem
|
|
<literal>HTTP/1.0 401</literal>-Header.
|
|
</para>
|
|
|
|
<note>
|
|
<title>Konfigurationshinweis</title>
|
|
<para>
|
|
PHP prüft das Vorhandensein einer <literal>AuthType</literal>
|
|
Apache-Direktive, um zu entscheiden, ob eine externe Authentifizierung
|
|
aktiv ist.
|
|
</para>
|
|
</note>
|
|
|
|
<simpara>
|
|
Zu beachten ist, dass Obenstehendes keinesfalls jemanden, der auf demselben
|
|
Server die Kontrolle über eine nicht authentifizierte URL hat, davon
|
|
abhalten kann, Passwörter von authentifizierten URLs auszulesen.
|
|
</simpara>
|
|
<simpara>
|
|
Sowohl Netscape als auch der Internet Explorer löschen den lokalen
|
|
Authentifizierungscache des Browserfensters, wenn der Server eine
|
|
401-Meldung zurückgibt. Dies kann verwendet werden, um einen Benutzer
|
|
"auszuloggen" und eine erneute Eingabe des Benutzernamens/Passworts zu
|
|
erzwingen. Manchmal wird dieses Verhalten für das automatische Ausloggen
|
|
nach Ablauf einer bestimmten Zeitspanne oder für einen Logout-Button
|
|
genutzt.
|
|
</simpara>
|
|
<para>
|
|
<example>
|
|
<title>HTTP-Authentifizierung, mit erneuter Anforderung von Name/Passwort</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
function authentifizieren() {
|
|
header('WWW-Authenticate: Basic realm="Test Authentication System"');
|
|
header('HTTP/1.0 401 Unauthorized');
|
|
echo "Bitte geben Sie eine gültige Login-ID und das Passwort für den
|
|
Zugang ein\n";
|
|
exit;
|
|
}
|
|
|
|
if (!isset($_SERVER['PHP_AUTH_USER']) ||
|
|
($_POST['Gesehen'] == 1 && $_POST['AlteAuth'] == $_SERVER['PHP_AUTH_USER'])) {
|
|
authentifizieren();
|
|
} else {
|
|
echo "<p>Willkommen: " . htmlspecialchars($_SERVER['PHP_AUTH_USER']) . "<br />";
|
|
echo "Alt: " . htmlspecialchars($_REQUEST['AlteAuth']);
|
|
echo "<form action='' method='post'>\n";
|
|
echo "<input type='hidden' name='Gesehen' value='1' />\n";
|
|
echo "<input type='hidden' name='AlteAuth' value=\"" . htmlspecialchars($_SERVER['PHP_AUTH_USER']) . "\" />\n";
|
|
echo "<input type='submit' value='Erneut Anmelden' />\n";
|
|
echo "</form></p>\n";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<simpara>
|
|
Dieses Verhalten wird vom Authentifizierungsstandard <literal>HTTP
|
|
Basic</literal> nicht gefordert, daher sollte man sich nie darauf
|
|
verlassen. Tests mit <literal>Lynx</literal> haben gezeigt, dass
|
|
<literal>Lynx</literal> die Authentifizierungsinformationen bei Erhalt
|
|
einer 401-Meldung nicht löscht. Solange der benötigte Berechtigungsnachweis
|
|
nicht geändert wird, kann der Benutzer auf die vorhergehende Seite zurück
|
|
und danach vorwärts und die angeforderte Adresse wieder öffnen. Der
|
|
Benutzer kann die Authentifizierungsinformationen aber durch Drücken von
|
|
<literal>'_'</literal> löschen.
|
|
</simpara>
|
|
<simpara>
|
|
Damit die HTTP-Authentifizierung funktioniert, wenn der IIS mit der
|
|
CGI-Version von PHP verwendet wird, müssen Sie die "<literal>Directory
|
|
Security</literal>" Ihrer IIS-Konfiguration ändern. Klicken Sie auf
|
|
"<literal>Edit</literal>" und aktivieren Sie nur "<literal>Anonymous
|
|
Access</literal>". Alle anderen Felder sollten deaktiviert bleiben.
|
|
</simpara>
|
|
<note>
|
|
<title>IIS-Anmerkung:</title>
|
|
<simpara>
|
|
Damit die HTTP-Authentifizierung mit dem IIS funktioniert, muss die
|
|
PHP-Konfigurationsanweisung
|
|
<link linkend="ini.cgi.rfc2616-headers">cgi.rfc2616_headers</link> auf
|
|
<literal>0</literal> (die Voreinstellung) gesetzt sein.
|
|
</simpara>
|
|
</note>
|
|
|
|
</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:"~/.phpdoc/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
|
|
-->
|