Frage

Ich versuche, Basis HTTP-Authentifizierung und folgte dem Beispiel auf der PHP-Handbuch Seite. Aber es für mich nicht funktioniert. Die Variable $_SERVER['PHP_AUTH_USER'] scheint nicht eingestellt werden. Wenn ein Benutzer versuchen, mich anzumelden, wird der Benutzer whith einen neuen Login-Dialog aufgefordert. Der Server läuft PHP 5.3.3 und ich habe versucht, mit Google Chrome und Internet Explorer.

Hier ist das einfache Beispiel, dass ich verwendet:

<?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?

War es hilfreich?

Lösung

Wie laufen PHP zu werden? Wenn es durch Apache mod_cgi ist, ich fürchte, Sie nicht halten, die Authentifizierungsinformationen überhaupt bekommen. Apache wird Geben Sie es nicht an CGI-Anwendungen, wenn Sie es mit dem SECURITY_HOLE_PASS_AUTHORIZATION Flag kompilieren. (Ob es tatsächlich eine Sicherheitslücke oder nicht, hängt davon ab, ob andere Benutzer auf Ihrem Server ein geringeres oder größeres Privileg als Ihre Website-Nutzer).

Wenn es IIS CGI, müssen Sie sicherstellen, dass nur ‚Anonymous‘ Verzeichniszugriff konfiguriert ist, oder IIS wird auf Schritt versuchen, in und beglaubigen Credentials selbst.

echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";

HTML-Injektion Sicherheitsloch (gut, wenn es funktioniert). Verwenden htmlspecialchars(). Man, ist, dass PHP doc Seite voll von höchst fragwürdig Beratung und Code.

Sie können zu sehen versuchen, auch bei $_SERVER['HTTP_AUTHORIZATION'], obwohl ich es ist die mod_cgi Problem in diesem Fall keine der beiden Variablen vermuten, wird anwesend sein und Sie werden stattdessen Cookie-basierten Login zurückgreifen müssen. Oder Wechsel zu einem Host mit einem moderneren Ansatz für PHP-Hosting, wie FastCGI oder mod_php.

Andere Tipps

Versuchen Sie, diese ::

<?php
    /*
    ** Define a couple of functions for
    ** starting and ending an HTML document
    */
    function startPage()
    {
        print("<html>\n");
        print("<head>\n");
        print("<title>Listing 24-1</title>\n");
        print("</head>\n");
        print("<body>\n");
    }

    function endPage()
    {
        print("</body>\n");
        print("</html>\n");
    }
    /*
    ** test for username/password
    */
    if( ( isset($_SERVER['PHP_AUTH_USER'] ) && ( $_SERVER['PHP_AUTH_USER'] == "leon" ) ) AND
      ( isset($_SERVER['PHP_AUTH_PW'] ) && ( $_SERVER['PHP_AUTH_PW'] == "secret" )) )
    {
        startPage();

        print("You have logged in successfully!<br>\n");

        endPage();
    }
    else
    {
        //Send headers to cause a browser to request
        //username and password from user
        header("WWW-Authenticate: " .
            "Basic realm=\"Leon's Protected Area\"");
        header("HTTP/1.0 401 Unauthorized");

        //Show failure text, which browsers usually
        //show only after several failed attempts
        print("This page is protected by HTTP " .
            "Authentication.<br>\nUse <b>leon</b> " .
            "for the username, and <b>secret</b> " .
            "for the password.<br>\n");
    }
?>

Für PHP-CGI:

in .htaccess hinzufügen:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>

und am Anfang des Skripts fügen Sie diese:

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

Ich denke, die PHP-Methoden beruhen auf Standardauthentifizierung auf dem Webserver konfiguriert werden. Eine einfache Möglichkeit, dies zu tun, ist eine .htaccess-Datei im Verzeichnis enthalten Sie die Standardauthentifizierung für aktivieren möchten.

Die meisten Unix-basierten Web-Hosts können Sie dies tun, indem Sie einfach diese Datei hochzuladen. Eine separate Datei (diese .htauth nennen) die Benutzer-Logins halten, dass die Website oder das Verzeichnis zugreifen dürfen.

Überprüfen Sie, ob Sie Ihre Variable $_SERVER[‘PHP_AUTH_USER’] and$_SERVER[‘PHP_AUTH_PW’] vor Ort haben, wo overrided Sie versuchen, die beide Variablen zugreifen zu können.

Wenn oben nicht der Fall ist, dann Chek, wenn Sie PHP als CGI-mod verwenden oder nicht. Wenn Sie PHP verwenden als cgi dann in den meisten Casemod werden Sie nicht $_SERVER[‘PHP_AUTH_USER’] and$_SERVER[‘PHP_AUTH_PW’] bekommen, weil generraly haben wir nicht die Apache mit Option SECURITY_HOLE_PASS_AUTHORIZATION kompilieren Also, wenn Sie beide Variable erhalten möchten dann neu kompilieren Apache mit Option SECURITY_HOLE_PASS_AUTHORIZATION oder können Sie .htaccess Ansatz verwenden, erklärt in PHP Grund auth Post.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top