Question

Je suis en train d'utiliser l'authentification de base HTTP et suivi l'exemple sur la page de manuel PHP. Mais cela ne fonctionne pas pour moi. La $_SERVER['PHP_AUTH_USER'] variable ne semble pas être ensemble. Lorsqu'un essai d'utilisateur de se connecter, l'utilisateur est invité cinque une nouvelle connexion-dialogue. Le serveur est en cours d'exécution PHP 5.3.3 et j'ai essayé avec Google Chrome et Internet Explorer.

Voici l'exemple simple que je:

<?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>";
}
?>

Quel est le problème? Comment puis-je utiliser l'authentification HTTP de base en PHP?

Était-ce utile?

La solution

Comment PHP en cours d'exécution? Si c'est par Apache mod_cgi, je crains que vous ne pouvez pas mettre la main sur les informations d'authentification du tout. Apache ne passera pas à des applications CGI, sauf si vous compilez avec le drapeau SECURITY_HOLE_PASS_AUTHORIZATION. (Que ce soit en fait un trou de sécurité ou ne dépend pas du fait que d'autres utilisateurs sur votre serveur ont un privilège inférieur ou supérieur à vos utilisateurs du site.)

Si ce CGI IIS, vous devez vous assurer que seul l'accès au répertoire "anonymes est configuré ou IIS essayerez à l'étape et des informations d'identification authentifient lui-même.

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

trou de sécurité HTML-injection (bien, si cela a fonctionné). Utilisez htmlspecialchars(). L'homme, est cette page doc PHP plein de conseils et un code très discutable.

Vous pouvez essayer de regarder $_SERVER['HTTP_AUTHORIZATION'] aussi bien, mais je soupçonne que c'est la question mod_cgi dans ce cas, aucune variable ne sera présent et vous devrez recourir à la connexion basée sur les cookies à la place. Ou le changement d'un hôte avec une approche plus moderne d'hébergement PHP, comme FastCGI ou mod_php.

Autres conseils

Essayer cette ::

<?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");
    }
?>

Pour PHP-CGI:

.htaccess ajouter ceci:

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

et au début de votre script ajouter ceci:

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

Je pense que les méthodes PHP reposent sur l'authentification de base étant configuré sur le serveur Web. Un moyen facile de le faire est d'inclure un fichier .htaccess dans le répertoire que vous souhaitez activer l'authentification de base pour.

hôtes web en unix La plupart vous permettent de le faire en téléchargeant simplement ce fichier. Un fichier séparé (appeler cette .htauth) tiendra les connexions des utilisateurs qui sont autorisés à accéder au site ou un répertoire.

Vérifiez si vous avez overrided votre variable $_SERVER[‘PHP_AUTH_USER’] and$_SERVER[‘PHP_AUTH_PW’] avant l'endroit où vous essayez d'accéder aux deux variables.

Si ci-dessus n'est pas le cas chek alors si vous utilisez PHP en tant que mod cgi ou non. Si vous utilisez PHP comme cgi mod puis dans la plupart des cas, vous ne serez pas $_SERVER[‘PHP_AUTH_USER’] and$_SERVER[‘PHP_AUTH_PW’] parce generraly nous ne compilons pas apache avec option SECURITY_HOLE_PASS_AUTHORIZATION Donc, si vous voulez obtenir les deux variables puis recompiler apache avec option SECURITY_HOLE_PASS_AUTHORIZATION ou vous pouvez utiliser l'approche .htaccess expliqué dans PHP de base auth après.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top