Comment puis-je détecter si l'utilisateur est sur localhost en PHP?
En d'autres termes, comment puis-je savoir si la personne à l'aide de mon application web sur le serveur, il se trouve sur? Si je me souviens bien, PHPMyAdmin n'quelque chose comme ceci pour des raisons de sécurité.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également utiliser
$_SERVER['REMOTE_ADDR']
pour l'adresse IP du client qui demande est donnée par le serveur web.Host: 127.0.0.1
et il serait peuplée deHTTP_HOST
, donc c'est pas une méthode fiable à tous.$whitelist = array('127.0.0.1', '::1');
filter_input(INPUT_SERVER, 'REMOTE_ADDR')
au lieu de$_SERVER['REMOTE_ADDR']
.Comme un complément, comme une fonction...
Plus récents, les utilisateurs d'OS (Win 7, 8) peut également s'avérer nécessaire d'inclure une IPV6-format de l'adresse distante dans leur liste blanche de tableau:
$_SERVER["REMOTE_ADDR"]
devrait vous indiquer l'IP de l'utilisateur. C'est spoofable, si.Vérifier ce bounty question pour une description détaillée de discussion.
Je pense que ce dont vous vous souvenez avec PHPMyAdmin est quelque chose de différent: Beaucoup de Serveurs MySQL sont configurés de sorte qu'ils ne peuvent être accessibles à partir de localhost pour des raisons de sécurité.
Il ne semble pas que vous devez utiliser
$_SERVER['HTTP_HOST']
, parce que c'est la valeur d'en-tête http, facilement truquées.Vous pouvez utiliser
$_SERVER["REMOTE_ADDR"]
trop, c'est le plus sûr de la valeur, mais il est également possible de faux. Cetteremote_addr
est l'adresse où Apache renvoie le résultat à.REMOTE_ADDR
est possible de faux, cependant, si vous souhaitez faux comme127.0.0.1
ou::1
, qui nécessite compromettre la machine, à qui une copie duREMOTE_ADDR
est le cadet de vos soucis. Réponse pertinente - stackoverflow.com/a/5092951/3774582Je suis désolé, mais toutes ces réponses semblent terrible pour moi. Je suggère de reformuler la question parce que, en un sens, toutes les machines sont "localhost".
La question devrait être: Comment puis-je exécuter des chemins de code différents en fonction de l'ordinateur sur lequel il est exécuté sur.
À mon avis, le plus simple est de créer un fichier appelé DEVMACHINE ou ce que vous voulez vraiment et puis il suffit de vérifier
N'oubliez pas de les exclure ce fichier lors du téléchargement vers le live de l'environnement d'hébergement!
Cette solution n'est pas en fonction de la configuration du réseau, il ne peut pas être falsifié et facilite le passage entre l'exécution de vivre "-code" et "dev-code".
Si vous voulez avoir un blanche /allowlist qui prend en charge adresses ip statique et dynamique noms.
Par exemple:
De cette façon, vous pouvez définir une liste de noms/IPs qui sera en mesure (pour sûr) pour être détectée. Dynamique des noms d'ajouter plus de flexibilité pour l'accès à partir de différents points.
Vous avez deux options ici, vous pouvez définir un nom dans votre fichier hosts local ou vous pouvez simplement utiliser l'une dynamique, fournisseur de nom de qui pourrait être trouvé n'importe où.
Cette fonction CACHES résultats parce que gethostbyname est un très lente de la fonction.
À cette fin, j'ai implémenté cette fonction:
Pour une meilleure fiabilité vous pouvez remplacer le $_SERVER['REMOTE_ADDR'] pour la get_ip_address() que @Pekka a mentionné dans son post comme "cette abondance question"
Comment comparer
$_SERVER['SERVER_ADDR'] === $_SERVER['REMOTE_ADDR']
pour déterminer si le client est sur la même machine que le serveur?$_SERVER['SERVER_ADDR']
n'est pas toujours fiable de retourner l'adresse du serveur par exemple si vous utilisez des équilibreurs de charge, il renvoie l'adresse IP de l'équilibreur de charge, je crois.J'ai trouvé une réponse facile.
Car tous les lecteurs locaux C: ou D: ou F: ... etc.
Simplement détecter si le deuxième personnage est un :