Wie kann ich mit Basic-HTTP-Authentifizierung in PHP?
Ich versuche, Basic-HTTP-Authentifizierung und folgte dem Beispiel auf der PHP manual-Seite. Aber es funktioniert nicht für mich. Die variable $_SERVER['PHP_AUTH_USER']
scheint nicht eingestellt zu werden. Wenn ein Benutzer versucht, sich einzuloggen, wird der Benutzer aufgefordert, mit einem neuen login-dialog. Der server läuft PHP 5.3.3 und ich habe versucht mit Google Chrome und Internet Explorer.
Hier ist das einfache Beispiel, das ich verwendet habe:
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="Jonas Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'User pressed Cancel';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as you password.</p>";
}
?>
Was ist falsch? Wie kann ich mit Basic-HTTP-Authentifizierung in PHP?
- Anstatt zu versuchen, dies zu tun mit PHP, warum nicht Sie verwenden den web-server, z.B. httpd.apache.org/docs/2.2/howto/auth.html
- Ich denke, dass meine web-host-Apache verwendet.
- Dann wird mein PHP-code werden denpendent von meiner web-server, und ich kann nicht easyli Wechsel zu einem anderen web-server. Ich würde gerne auf dem HTTP-standard.
- Unbefugten ist falsch geschrieben, erste. Dein Beispiel ist kürzer als die der link verwiesen wird.
- Danke, aber es hat nicht geholfen.
- Fair genug, es ist so einfach, mit
htpasswd
🙂 - Haben Sie Lesen Sie die Kommentare auf den link, der Sie gefolgt sind? Es sind Vorschläge für verschiedene web-Server und mehrere Versionen des Programms, eine von diesen möglicherweise besser geeignet für Ihre Bedürfnisse. Für PHP finde ich das Handbuch Kommentare zu mehr nützlich als die Beschreibung in der Bedienungsanleitung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie wird PHP ausgeführt? Wenn es durch Apache mod_cgi, ich fürchte, Sie können nicht bekommen, die Authentifizierung Informationen. Apache wird nicht übergeben es an CGI-apps, es sei denn, Sie kompilieren Sie es mit der
SECURITY_HOLE_PASS_AUTHORIZATION
Flagge. (Ob es wirklich eine Sicherheitslücke ist oder nicht hängt davon ab, ob andere Benutzer auf Ihrem server, haben ein geringeres oder größeres Privileg, als Ihre website-Nutzer.)Wenn es IIS CGI, haben Sie, um sicherzustellen, dass nur 'Anonyme' directory access konfiguriert ist, oder IIS wird versuchen, Schritt und authentifizieren Anmeldeinformationen selbst.
HTML-injection Sicherheitslücke (gut, wenn es funktionierte). Verwenden
htmlspecialchars()
. Mann, ist das PHP-doc Seite voll von höchst fragwürdige Ratschläge und code.Können Sie versuchen, Sie zu betrachten
$_SERVER['HTTP_AUTHORIZATION']
auch, obwohl ich vermute, es ist die mod_cgi Problem in dem Fall, dass keine variable vorhanden sein, und Sie müssen Rückgriff auf die cookie-basierte Anmeldung statt. Oder ein host mit einem modernen Ansatz, um PHP-hosting, wie FastCGI oder mod_php.Versuchen Sie dies::
Für PHP-CGI:
in .htaccess Folgendes hinzufügen:
und am Anfang des Skripts Folgendes hinzufügen:
substr()
verdächtig ist. Ich würde die erste Pause der string am ersten Leerzeichen und stellen Sie sicher, dass die Art der Authentifizierung wird in der Tat zuBasic
(ignoring case). Dann Holen Sie sich den zweiten Teil und entschlüsseln.Ich denke, die PHP-Methoden verlassen sich auf die Standardauthentifizierung konfiguriert wird auf dem Web-Server. Eine einfache Möglichkeit, dies zu tun ist, um eine .htaccess-Datei in dem Verzeichnis, das Sie möchten, aktivieren Sie die Standardauthentifizierung für.
Den meisten unix-basierten web-hosts erlauben nur das hochladen dieser Datei. Eine separate Datei (nennen wir das .htauth) wird die Benutzer-logins, die Zugriff auf die Website oder das Verzeichnis.
Prüfen Sie, ob Sie overrided variable
$_SERVER[‘PHP_AUTH_USER’]
und$_SERVER[‘PHP_AUTH_PW’]
vor dem Ort, wo Sie versuchen, auf den beide Variablen.Wenn oben nicht der Fall ist, dann chek falls Sie php als cgi-mod oder nicht. FALLS Sie php als cgi-mod dann in den meisten Fällen werden Sie nicht bekommen
$_SERVER[‘PHP_AUTH_USER’]
und$_SERVER[‘PHP_AUTH_PW’]
weil generraly wir nicht kompilieren Sie den apache mit der optionSECURITY_HOLE_PASS_AUTHORIZATION
Also, wenn Sie wollen, um sowohl die variable dann erneut kompilieren Sie apache mit der option SECURITY_HOLE_PASS_AUTHORIZATION oder Sie verwenden können .htaccess-Ansatz erläutert in PHP basic auth post.