Comment puis-je utiliser l'Authentification HTTP de Base en PHP?
Je suis en train d'utiliser Authentification HTTP de base et suivi l'exemple sur le PHP de la page de manuel. Mais il ne fonctionne pas pour moi. La variable $_SERVER['PHP_AUTH_USER']
ne semble pas être ensemble. Lorsqu'un utilisateur essaie de se connecter, l'utilisateur est invité avec une nouvelle connexion-boîte de dialogue. Le serveur est en cours d'exécution de PHP 5.3.3 et j'ai essayé avec Google Chrome et Internet Explorer.
Voici l'exemple simple que j'ai utilisé:
<?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?
Plutôt que d'essayer de le faire avec PHP, pourquoi ne pas utiliser le serveur web, par exemple httpd.apache.org/docs/2.2/howto/auth.html
Je pense que mon hébergeur utilise Apache.
Alors mon code PHP sera denpendent de mon serveur web, et je ne peux pas easyli changement vers un autre serveur web. Je voudrais suivre le protocole HTTP.
Non autorisée est mal orthographié, d'abord. Votre exemple est plus court que le lien que vous l'avez mentionné.
Avez-vous lu les commentaires sur le lien que vous avez suivi? Il ya des suggestions pour différents serveurs web et plusieurs versions du programme, l'un de ces pourrait mieux à vos besoins. Pour PHP-je trouver le manuel des commentaires plus utile que la description dans le manuel.
Je pense que mon hébergeur utilise Apache.
Alors mon code PHP sera denpendent de mon serveur web, et je ne peux pas easyli changement vers un autre serveur web. Je voudrais suivre le protocole HTTP.
Non autorisée est mal orthographié, d'abord. Votre exemple est plus court que le lien que vous l'avez mentionné.
Avez-vous lu les commentaires sur le lien que vous avez suivi? Il ya des suggestions pour différents serveurs web et plusieurs versions du programme, l'un de ces pourrait mieux à vos besoins. Pour PHP-je trouver le manuel des commentaires plus utile que la description dans le manuel.
OriginalL'auteur Jonas | 2010-11-11
Vous devez vous connecter pour publier un commentaire.
Comment est PHP en cours d'exécution? Si c'est par le biais de Apache mod_cgi, je crains que vous ne pouvez pas obtenir les informations d'authentification. Apache de ne pas passer à CGI applications, sauf si vous compilez avec l'
SECURITY_HOLE_PASS_AUTHORIZATION
drapeau. (Si c'est un trou de sécurité ou pas ne dépend pas de savoir si d'autres utilisateurs sur votre serveur ont une plus faible ou le plus grand privilège que votre site web des utilisateurs.)Si c'est IIS CGI, vous devez vous assurer que seuls les "Anonymes" d'accès au répertoire est configuré, ou IIS va essayer d'intervenir et d'authentifier les informations d'identification lui-même.
HTML-injection trou de sécurité (bien, s'il a travaillé). Utilisation
htmlspecialchars()
. L'homme, c'est que PHP doc page pleine de très contestable des conseils et code.Vous pouvez essayer de regarder
$_SERVER['HTTP_AUTHORIZATION']
, bien que je soupçonne que c'est le mod_cgi problème dans lequel cas, ni la variable sera présent et vous devrez recourir à des cookies de connexion à la place. Ou de modifier à un hôte avec une approche plus moderne, PHP, hébergement, tels que FastCGI ou mod_php.OriginalL'auteur bobince
Pour PHP-CGI:
.htaccess ajouter ceci:
et au début de votre script à ajouter ceci:
substr()
est suspect. Je voudrais d'abord briser la chaîne de caractères à la première place et assurez-vous que le type d'authentification est en effet fixé àBasic
(ignorant la casse). Ensuite, la deuxième partie et le décoder.Comment puis-je mettre en œuvre l'option de connexion automatique? J'ai ajouté le code ci-dessus, mais je suis un peu confus par où commencer dans mon application
OriginalL'auteur Teddy
Essayez ceci::
OriginalL'auteur Mazhar Ahmed
Je pense que le PHP méthodes sont basées sur l'Authentification de Base étant configuré sur le Serveur Web. Un moyen facile de le faire est d'inclure une .htaccess dans le répertoire que vous souhaitez activer l'authentification de base.
La plupart des unix hébergeurs vous permettent de faire cela simplement en téléchargeant ce fichier. Un fichier séparé (appelons cela .htauth) permettra de maintenir les connexions d'utilisateurs qui sont autorisés à accéder au site ou d'un répertoire.
pas vrai. Apache envoie toujours un "Serveur:" en-tête et le PHP ne peut pas l'en empêcher.
OriginalL'auteur Ken Richards
Vérifier si vous avez surdéfini votre variable
$_SERVER[‘PHP_AUTH_USER’]
et$_SERVER[‘PHP_AUTH_PW’]
avant l'endroit où vous essayez d'accéder à la fois des variables.Si ci-dessus n'est pas le cas, alors chek si vous utilisez php comme cgi mod ou pas. SI vous utilisez php comme cgi mod alors dans la plupart des cas, vous n'obtiendrez pas
$_SERVER[‘PHP_AUTH_USER’]
et$_SERVER[‘PHP_AUTH_PW’]
parce que generraly nous n'avons pas compiler apache avec l'optionSECURITY_HOLE_PASS_AUTHORIZATION
Donc, si vous voulez obtenir à la fois variable puis re-compiler apache avec l'option SECURITY_HOLE_PASS_AUTHORIZATION ou vous pouvez utiliser .htaccess approche a expliqué dans PHP basic auth post.
OriginalL'auteur Ankur Kumar Singh